golang& postfix - 收到的电子邮件标题是localhost

时间:2016-08-02 06:08:47

标签: email go smtp gmail postfix

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

从命令行发送电子邮件时
 if($('.fresher_checked').is(":checked"))
      {

      return isNotEmpty($form.find('#f_name'), "Please enter your name.",
               $form.find('#elmNameError'))

               ;
      }
      else{

      return isNotEmpty($form.find('#f_name'), "Please enter your name.",
               $form.find('#elmNameError'))
               && isNotEmpty($form.find('#w_company_one'), "Please enter Experience.",
               $form.find('#elmExpError'))
               ;
      }

电子邮件到达时很好,并没有标记为垃圾邮件。但是,从使用站点服务器发送时,标头设置为从localhost接收,因此被标记为垃圾邮件。

echo "body" | mail -s "subject" test@example.com

作为一个注释,dkim,spf和dmarc测试所有列表都已通过,所以它们不是问题。

我也尝试使用上面的echo方法发送一封包含相同内容的电子邮件,并且它已经很好了(尽管我使用上面提到的纯文本并没有添加内容类型标题)。

最初这是使用smtp.SendMail

发送的
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)

没有提供设置发送主机的方法,所以为了纠正这个问题我转而使用手动拨号,发送HELO消息,然后开始tls(尝试在HELO之前开始tls导致恐慌说HELO必须是第一个电话)

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

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

您的建议和帮助表示赞赏,这是我第一次尝试配置MTA并像这样使用它,有一点学习曲线,我显然还没有结束

1 个答案:

答案 0 :(得分:1)

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

现有条目是:

127.0.0.1 localhost example.com

将此更改为:

127.0.0.1 example.com localhost

解决了这个问题,同时没有破坏需要localhost正确评估的现有服务。

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

<remote ip> <hostname>

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

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