You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用wneessen/go-mail能否分别设置邮件HTML与纯文本内容?

解决wneessen/go-mail中HTML与纯文本内容互相覆盖的问题

问题根源在于wneessen/go-mail的SetBodyString方法是用来设置邮件的主内容体,每次调用都会完全替换掉之前设置的内容。所以不管先设纯文本还是HTML,后调用的SetBodyString都会覆盖前者,导致最终只有一种格式的内容。

要同时发送HTML和纯文本格式的邮件,需要用AddAlternativeString方法来添加替代内容,而不是两次调用SetBodyString。主内容可以设为纯文本(兼容所有邮件客户端),再添加HTML作为替代格式,这样客户端会优先显示HTML,不支持的则显示纯文本。

修改后的SendHTML函数

把mail/main.go里的SendHTML函数修改如下:

func SendHTML(to string, subject string, html string, text string) error {
    message, err := makeMessage(to, subject)
    if err != nil {
        return err
    }

    // 设置纯文本为邮件主内容
    if err := message.SetBodyString(mail.TypeTextPlain, text); err != nil {
        return err
    }
    // 添加HTML作为替代内容
    if err := message.AddAlternativeString(mail.TypeTextHTML, html); err != nil {
        return err
    }

    if err := Client.DialAndSend(message); err != nil {
        return err
    }

    return nil
}

为什么这样有效?

  • SetBodyString:定义邮件的基础内容格式(这里用纯文本,保证兼容性)
  • AddAlternativeString:向邮件中添加另一种格式的内容,不会覆盖已有的主内容,而是作为备选格式存在。邮件客户端会根据自身支持情况选择显示哪种格式。

这样修改后,Hermes生成的HTML和纯文本内容就能同时被包含在邮件里,不会出现互相覆盖的问题了。

内容的提问来源于stack exchange,提问作者DevAddict

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:46:13