在尝试设置后缀以允许网站发送密码重置电子邮件时,我注意到在使用命令行发送电子邮件时
echo "body" | mail -s "subject" test@example.com
电子邮件很好地到达并且没有被标记为垃圾邮件。但是,当从站点服务器发送时,标头设置为从本地主机接收,因此被标记为垃圾邮件。
Received: from example.com (localhost [127.0.0.1])
by example.com (Postfix) with ESMTPS id CE1299C435
for <my_email@gmail.com>; Tue, 2 Aug 2016 05:28:41 +0000 (UTC)
请注意,dkim、spf 和 dmarc 测试所有列表都已通过,因此它们不是问题。
我还尝试使用上述回显方法发送具有相同内容的电子邮件并使其正常到达(尽管我在上面使用纯文本并且没有添加内容类型标题)。
最初这是使用 smtp.SendMail 发送的
err := smtp.SendMail(hostname + ":25", nil, sender, recipients, []byte(msgstr))
它无法设置发送主机,所以为了纠正这个问题,我切换到使用手动拨号,发送 HELO 消息,然后启动 tls(尝试在 HELO 之前启动 tls 导致恐慌说 HELO 必须是第一次通话)
c, err := smtp.Dial(host + ":25")
if err != nil {
log.Panic(err)
}
if err = c.Hello(host); err != nil {
log.Panic(err)
}
if err = c.StartTLS(config.TLS()); err != nil {
log.Panic(err)
}
这仍然可以成功发送电子邮件,但是与之前收到的标头仍然显示 localhost 作为来源一样,我觉得我误解了一些东西,因为我认为 HELO 用于识别呼叫的来源。
感谢您的建议和帮助,这是我第一次尝试配置 MTA 并像这样使用它,我显然还没有结束一些学习曲线。