更新邮件解析服务,添加主题参数以增强解析能力;修改HTML文件以支持PWA和优化视图设置
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 18s
Docker Build & Deploy / Deploy to Production (push) Successful in 6s

This commit is contained in:
孙诚
2025-12-25 13:40:26 +08:00
parent 728c39f43d
commit b14efd8d16
5 changed files with 32 additions and 13 deletions

View File

@@ -51,6 +51,7 @@ public class EmailHandleService(
var parsed = await ParseEmailBodyAsync(
from,
subject,
string.IsNullOrEmpty(emailMessage.Body)
? emailMessage.HtmlBody
: emailMessage.Body
@@ -112,6 +113,7 @@ public class EmailHandleService(
var parsed = await ParseEmailBodyAsync(
emailMessage.From,
emailMessage.Subject,
string.IsNullOrEmpty(emailMessage.Body)
? emailMessage.HtmlBody
: emailMessage.Body
@@ -260,9 +262,9 @@ public class EmailHandleService(
return inserted;
}
private async Task<(string card, string reason, decimal amount, decimal balance, TransactionType type, DateTime? occurredAt)[]?> ParseEmailBodyAsync(string from, string body)
private async Task<(string card, string reason, decimal amount, decimal balance, TransactionType type, DateTime? occurredAt)[]?> ParseEmailBodyAsync(string from, string subject, string body)
{
var service = emailParsers.FirstOrDefault(s => s.CanParse(from, body));
var service = emailParsers.FirstOrDefault(s => s.CanParse(from, subject, body));
if (service == null)
{

View File

@@ -5,13 +5,18 @@ public class EmailParseForm95555(
IOpenAiService openAiService
) : EmailParseServicesBase(logger, openAiService)
{
public override bool CanParse(string from, string body)
public override bool CanParse(string from, string subject, string body)
{
if (!from.Contains("95555@message.cmbchina.com"))
{
return false;
}
if (!subject.Contains("账户变动通知"))
{
return false;
}
// 不能包含HTML标签
if (Regex.IsMatch(body, "<.*?>"))
{

View File

@@ -7,13 +7,18 @@ public class EmailParseFormCCSVC(
IOpenAiService openAiService
) : EmailParseServicesBase(logger, openAiService)
{
public override bool CanParse(string from, string body)
public override bool CanParse(string from, string subject, string body)
{
if (!from.Contains("ccsvc@message.cmbchina.com"))
{
return false;
}
if (!subject.Contains("每日信用管家"))
{
return false;
}
// 必须包含HTML标签
if (!Regex.IsMatch(body, "<.*?>"))
{

View File

@@ -2,7 +2,7 @@
public interface IEmailParseServices
{
bool CanParse(string from, string body);
bool CanParse(string from, string subject, string body);
/// <summary>
/// 解析邮件内容,提取交易信息
@@ -22,7 +22,7 @@ public abstract class EmailParseServicesBase(
IOpenAiService openAiService
) : IEmailParseServices
{
public abstract bool CanParse(string from, string body);
public abstract bool CanParse(string from, string subject, string body);
public async Task<(
string card,

View File

@@ -3,8 +3,15 @@
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vite App</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<!-- PWA - 让应用在添加到主屏幕后以全屏模式运行 -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-title" content="账单管理">
<meta name="mobile-web-app-capable" content="yes">
<title>账单管理</title>
</head>
<body>
<div id="app"></div>