我使用golang通过以下方法发送带有exim的电子邮件
const sendmail = "/usr/sbin/exim"
func submitMail(m *gomail.Message) (err error) {
cmd := exec.Command(sendmail, "-t")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
pw, err := cmd.StdinPipe()
if err != nil {
return
}
err = cmd.Start()
if err != nil {
return
}
var errs [3]error
_, errs[0] = m.WriteTo(pw)
errs[1] = pw.Close()
errs[2] = cmd.Wait()
for _, err = range errs {
if err != nil {
return
}
}
return
}
问题是Exim用 -t
删除了Bcc如果使用-t选项调用Exim,则从中获取收件人地址 一个消息的标题,它删除任何可能存在的Bcc:标题(之后 提取其地址),除非消息没有To:或Cc: 标题,在这种情况下,没有地址的Bcc:标题留在 消息,符合RFC 822.如果-t不存在 命令行,不删除任何现有的密件抄送:标题。
如果调用Exim接收带有收件人地址的邮件 在命令行中给出,并且没有Bcc:,To:或Cc:header 消息,它通常添加一个To:标题,列出收件人。 已知一些邮件列表软件以这种方式提交消息, 在这种情况下,创建To:标头不是想要的。 如果设置了always_bcc选项,则Exim会添加一个空的Bcc:标头 而是在这种情况下。
答案 0 :(得分:2)
" Sendmail看起来很像"使用-t
的模式会在处理后删除Bcc:
标题
在-t
模式Bcc:
标题中,内容将附加到(SMTP)收件人列表但是收件人将无法看到/接收Bcc:
标题。
样式指南建议: IF 您使用另一个SMTP / MTA软件(例如Exim)" sendmail看起来相似" (命令行可比性模式)那么使用他们提供的sendmail程序/二进制文件
const sendmail = "/usr/sbin/sendmail"