使用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
相关产品推荐
相关产品推荐

