Skip to content

v0.1.3 bug:显示名称与收件人看到的名称不符 #77

Description

@liao-zh

在添加账户-显示名称里填了一个名字,但实际收信时看到的并不符,变成了邮箱地址@之前的那一串名字,比如abc@d.com里的abc。这样如果是比较正式的邮件,会显得不专业。

问了zread ai,说是源码里的bug,见下。


是的,这确实是一个 bug。

问题出在发信时 From 头的构造逻辑上——你设置的 display_name 被彻底忽略了

具体追踪路径如下:

  1. 前端正确收集了 display_nameAccountSetup.tsx 中表单有 display_name 字段,写入 account 存储。
  2. 前端展示也正确ComposeView.tsx 的发件人下拉框确实用了 acc.display_name
    {acc.display_name ? `${acc.display_name} <${acc.email}>` : acc.email}
  3. 但后端发信时只用邮箱地址:在 compose.rs,SMTP 发送的 from 参数是:
    sender.send(
        &account.email,  // ← 只有 email,没有 display_name!
        ...
    )
  4. SMTP 层解析时丢失显示名smtp.rsfrom 解析为 lettre 的 Mailbox
    let from_mailbox: Mailbox = from.parse()...
    from 只是 "user@example.com" 时,解析结果不带任何显示名,收信人看到的就只剩邮箱 @ 前的部分。

修复方向:在 compose.rssend_imap_smtp_message 中,如果 account.display_name 有值,应将其格式化为 "Display Name <email@example.com>" 再传入 SmtpSender::send(),而非仅传 &account.email。同理,Gmail/Outlook 的 send_message 也应检查是否将 display_name 编入 MIME 的 From 头。

顺便提一句,本地保存的已发邮件倒是正确记录了 from_namecompose.rs#L150),所以你在自己本地看到的已发邮件会显示正确名字——但别人收到的就不是了。这也是为什么你觉得"怪怪的"却一时难以定位的原因。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions