3

在尝试设置后缀以允许网站发送密码重置电子邮件时,我注意到在使用命令行发送电子邮件时

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 并像这样使用它,我显然还没有结束一些学习曲线。

4

1 回答 1

2

正如 Juergen Gmeiner 在评论中所建议的那样,我的问题最终是由配置不当的/etc/hosts文件引起的,因此它不会影响其他服务。

现有条目是:

127.0.0.1 localhost example.com

将其更改为:

127.0.0.1 example.com localhost

在不破坏需要 localhost 正确评估的现有服务的同时解决了问题。

此解决方案适用于我的本地托管服务器进程,如果远程服务器出现同样的问题,并且需要使用远程服务器的 ip 和主机名创建等效的类似问题。IE

<remote ip> <hostname>

注意:虽然我通过从本地开发版本调用到我们的生产服务器来测试最后一部分并且它可以工作,但它不是 100% 测试的解决方案。

谢谢大家的帮助,我希望我的这个错误可以帮助其他任何在未来犯类似错误的人。

于 2016-08-03T10:55:26.770 回答