feat(mail): 支持发件人名称展示与存储
- 为邮件消息新增 `fromName` 字段,并同步扩展数据库迁移、API 类型与前后端查询/入库逻辑。 - 解析入站邮件时提取并保存发件人名称,发信时将邮箱显示名写入 MIME `From` 头。 - 邮件列表、详情、通知与引用内容改为优先展示发件人名称,提升可读性。
This commit is contained in:
@@ -354,7 +354,7 @@ func (a *App) parseMaildirMessage(raw []byte, fallbackTo string) (storedMessage,
|
||||
if strings.TrimSpace(subject) == "" {
|
||||
subject = "(no subject)"
|
||||
}
|
||||
from := firstAddress(m.Header.Get("From"))
|
||||
from, fromName := firstAddressParts(m.Header.Get("From"))
|
||||
to := addressList(m.Header.Get("To"))
|
||||
cc := addressList(m.Header.Get("Cc"))
|
||||
if len(to) == 0 {
|
||||
@@ -382,6 +382,7 @@ func (a *App) parseMaildirMessage(raw []byte, fallbackTo string) (storedMessage,
|
||||
MessageID: strings.TrimSpace(m.Header.Get("Message-Id")),
|
||||
Subject: subject,
|
||||
From: from,
|
||||
FromName: fromName,
|
||||
To: to,
|
||||
CC: cc,
|
||||
SentAt: sentAt,
|
||||
@@ -480,12 +481,13 @@ func partFilename(header textproto.MIMEHeader) string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func firstAddress(value string) string {
|
||||
items := addressList(value)
|
||||
if len(items) == 0 {
|
||||
return strings.TrimSpace(value)
|
||||
func firstAddressParts(value string) (string, string) {
|
||||
items, err := netmail.ParseAddressList(value)
|
||||
if err != nil || len(items) == 0 {
|
||||
return strings.TrimSpace(value), ""
|
||||
}
|
||||
return items[0]
|
||||
item := items[0]
|
||||
return normalizeEmail(item.Address), strings.TrimSpace(item.Name)
|
||||
}
|
||||
|
||||
func addressList(value string) []string {
|
||||
|
||||
Reference in New Issue
Block a user