在添加账户-显示名称里填了一个名字,但实际收信时看到的并不符,变成了邮箱地址@之前的那一串名字,比如abc@d.com里的abc。这样如果是比较正式的邮件,会显得不专业。
问了zread ai,说是源码里的bug,见下。
是的,这确实是一个 bug。
问题出在发信时 From 头的构造逻辑上——你设置的 display_name 被彻底忽略了。
具体追踪路径如下:
- 前端正确收集了
display_name:AccountSetup.tsx 中表单有 display_name 字段,写入 account 存储。
- 前端展示也正确:ComposeView.tsx 的发件人下拉框确实用了
acc.display_name:
{acc.display_name ? `${acc.display_name} <${acc.email}>` : acc.email}
- 但后端发信时只用邮箱地址:在 compose.rs,SMTP 发送的
from 参数是:
sender.send(
&account.email, // ← 只有 email,没有 display_name!
...
)
- SMTP 层解析时丢失显示名:smtp.rs 将
from 解析为 lettre 的 Mailbox:
let from_mailbox: Mailbox = from.parse()...
当 from 只是 "user@example.com" 时,解析结果不带任何显示名,收信人看到的就只剩邮箱 @ 前的部分。
修复方向:在 compose.rs 的 send_imap_smtp_message 中,如果 account.display_name 有值,应将其格式化为 "Display Name <email@example.com>" 再传入 SmtpSender::send(),而非仅传 &account.email。同理,Gmail/Outlook 的 send_message 也应检查是否将 display_name 编入 MIME 的 From 头。
顺便提一句,本地保存的已发邮件倒是正确记录了 from_name(compose.rs#L150),所以你在自己本地看到的已发邮件会显示正确名字——但别人收到的就不是了。这也是为什么你觉得"怪怪的"却一时难以定位的原因。
在添加账户-显示名称里填了一个名字,但实际收信时看到的并不符,变成了邮箱地址@之前的那一串名字,比如abc@d.com里的abc。这样如果是比较正式的邮件,会显得不专业。
问了zread ai,说是源码里的bug,见下。
是的,这确实是一个 bug。
问题出在发信时
From头的构造逻辑上——你设置的display_name被彻底忽略了。具体追踪路径如下:
display_name:AccountSetup.tsx 中表单有display_name字段,写入 account 存储。acc.display_name:from参数是:from解析为 lettre 的Mailbox:from只是"user@example.com"时,解析结果不带任何显示名,收信人看到的就只剩邮箱 @ 前的部分。修复方向:在 compose.rs 的
send_imap_smtp_message中,如果account.display_name有值,应将其格式化为"Display Name <email@example.com>"再传入SmtpSender::send(),而非仅传&account.email。同理,Gmail/Outlook 的send_message也应检查是否将display_name编入 MIME 的From头。顺便提一句,本地保存的已发邮件倒是正确记录了
from_name(compose.rs#L150),所以你在自己本地看到的已发邮件会显示正确名字——但别人收到的就不是了。这也是为什么你觉得"怪怪的"却一时难以定位的原因。