email - golang & postfix - 收到的电子邮件 header 是本地主机

标签 email go smtp gmail postfix

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

从命令行发送电子邮件时
echo "body" | mail -s "subject" test@example.com

电子邮件到达时很好,没有被标记为垃圾邮件。然而,当从站点服务器发送时, header 被设置为从本地主机接收,因此被标记为垃圾邮件。

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 测试所有列表均已通过,因此它们不是问题所在。

我也尝试过使用上述回显方法发送一封内容相同的电子邮件,并且它顺利到达(尽管我像上面那样使用纯文本并且没有添加内容类型 header )。

最初这是使用 smtp.SendMail 发送的

err := smtp.SendMail(hostname + ":25", nil, sender, recipients, []byte(msgstr))

它没有提供设置发送主机的方法,所以为了纠正这个问题,我改用手动拨号,发送 HELO 消息,然后启动 tls(试图在 HELO 之前启动 tls 导致 panic 说 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)
}

这仍然会成功发送电子邮件,但与之前收到的 header 仍然显示 localhost 作为来源一样,我觉得我误解了一些东西,因为我认为 HELO 用于识别调用的来源。

感谢您的建议和帮助,这是我第一次尝试配置 MTA 并像这样使用它,显然我还没有完成一些学习曲线。

最佳答案

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

现有条目是:

127.0.0.1 localhost example.com

将其更改为:

127.0.0.1 example.com localhost

在不破坏需要本地主机正确评估的现有服务的情况下解决了问题。

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

<remote ip> <hostname>

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

谢谢大家的帮助,我希望我的这个错误对以后犯类似错误的其他人有所帮助。

关于email - golang & postfix - 收到的电子邮件 header 是本地主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38712902/

相关文章:

go - 在 Golang 中实现相同接口(interface)的不同结构

email - rfc5322:如何折叠没有空格的值?

c# - 使用 C# 通过 Gmail SMTP 服务器发送电子邮件

html - 电子邮件模板中的背景图像被阻止

go - http.ServeFile 在服务器 golang 上返回 404 not found 错误

c# - 在 C# 中将 HTML 电子邮件签名附加到纯文本电子邮件正文

python - Golang 相当于 pythons __getattr__() 或 __call__()

smtp - 使用 Exchange 2007 传输代理编辑 SMTP header

email - GitLab:无法通过 SMTP 发送电子邮件

html - 在电子邮件模板中将图像定位在另一个图像之上