fix
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 24s
Docker Build & Deploy / Deploy to Production (push) Successful in 6s
Docker Build & Deploy / Cleanup Dangling Images (push) Successful in 1s
Docker Build & Deploy / WeChat Notification (push) Successful in 3s

This commit is contained in:
SunCheng
2026-01-30 10:41:19 +08:00
parent d9703d31ae
commit 704f58b1a1
46 changed files with 6074 additions and 301 deletions

View File

@@ -74,13 +74,13 @@ public class EmailFetchService(ILogger<EmailFetchService> logger) : IEmailFetchS
_useSsl = useSsl;
_email = email;
_password = password;
// 如果已连接,先断开
if (_imapClient?.IsConnected == true)
{
await DisconnectAsync();
}
_imapClient = new ImapClient();
if (useSsl)
@@ -206,7 +206,7 @@ public class EmailFetchService(ILogger<EmailFetchService> logger) : IEmailFetchS
// 标记邮件为已读设置Seen标记
await inbox.AddFlagsAsync(uid, MessageFlags.Seen, silent: false);
_logger.LogDebug("邮件 {Uid} 标记已读操作已提交", uid);
}
catch (Exception ex)
@@ -240,13 +240,13 @@ public class EmailFetchService(ILogger<EmailFetchService> logger) : IEmailFetchS
}
return _imapClient?.IsConnected == true;
}
if (string.IsNullOrEmpty(_host) || string.IsNullOrEmpty(_email))
{
_logger.LogWarning("未初始化连接信息,无法自动重连");
return false;
}
_logger.LogInformation("检测到连接断开,尝试重新连接到 {Email}...", _email);
return await ConnectAsync(_host, _port, _useSsl, _email, _password);
}

View File

@@ -179,7 +179,7 @@ public class EmailHandleService(
{
var clone = records.ToArray().DeepClone();
if(clone?.Any() != true)
if (clone?.Any() != true)
{
return;
}

View File

@@ -72,7 +72,7 @@ public class EmailParseForm95555(
var balanceStr = match.Groups["balance"].Value;
var typeStr = match.Groups["type"].Value;
var reason = match.Groups["reason"].Value;
if(string.IsNullOrEmpty(reason))
if (string.IsNullOrEmpty(reason))
{
reason = typeStr;
}

View File

@@ -13,7 +13,7 @@ public partial class EmailParseFormCcsvc(
{
[GeneratedRegex("<.*?>")]
private static partial Regex HtmlRegex();
public override bool CanParse(string from, string subject, string body)
{
if (!from.Contains("ccsvc@message.cmbchina.com"))
@@ -141,7 +141,7 @@ public partial class EmailParseFormCcsvc(
}
// 招商信用卡特殊,消费金额为正数,退款为负数
if(amount > 0)
if (amount > 0)
{
type = TransactionType.Expense;
}

View File

@@ -47,7 +47,7 @@ public abstract class EmailParseServicesBase(
// AI兜底
result = await ParseByAiAsync(emailContent) ?? [];
if(result.Length == 0)
if (result.Length == 0)
{
logger.LogWarning("AI解析邮件内容也未能提取到任何交易记录");
}
@@ -65,10 +65,10 @@ public abstract class EmailParseServicesBase(
)[]> ParseEmailContentAsync(string emailContent);
private async Task<(
string card,
string reason,
decimal amount,
decimal balance,
string card,
string reason,
decimal amount,
decimal balance,
TransactionType type,
DateTime? occurredAt
)[]?> ParseByAiAsync(string body)
@@ -175,7 +175,7 @@ public abstract class EmailParseServicesBase(
}
var occurredAt = (DateTime?)null;
if(DateTime.TryParse(occurredAtStr, out var occurredAtValue))
if (DateTime.TryParse(occurredAtStr, out var occurredAtValue))
{
occurredAt = occurredAtValue;
}

View File

@@ -199,12 +199,12 @@ public class EmailSyncService(
message.TextBody ?? message.HtmlBody ?? string.Empty
) || (DateTime.Now - message.Date.DateTime > TimeSpan.FromDays(3)))
{
#if DEBUG
#if DEBUG
logger.LogDebug("DEBUG 模式下,跳过标记已读步骤");
#else
#else
// 标记邮件为已读
await emailFetchService.MarkAsReadAsync(uid);
#endif
#endif
}
}
catch (Exception ex)