2016-08-02 96 views
1

虽然试图安装后缀,允许一个网站发送密码重置邮件我注意到,当发送电子邮件窗体使用golang和后缀 - 电子邮件的接收的头为localhost

echo "body" | mail -s "subject" [email protected] 

的电子邮件,命令行刚刚到货罚款,并没有标记为垃圾邮件。但是,从站点服务器发送时,标头设置为从本地主机接收,因此被标记为垃圾邮件。

Received: from example.com (localhost [127.0.0.1]) 
by example.com (Postfix) with ESMTPS id CE1299C435 
for <[email protected]>; Tue, 2 Aug 2016 05:28:41 +0000 (UTC) 

作为说明,dkim,spf和dmarc测试所有列表为传递,所以它们不是问题。

我也尝试使用上述echo方法发送具有相同内容的电子邮件,并使其到达正常(尽管明文像我上面所用的那样,并没有添加内容类型标头)。

最初,这是使用smtp.SendMail

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

其中没有提供方法来设置在试图纠正此我切换到使用手动拨号发送主机,所以,发送HELO消息,然后开始发送TLS(尝试启动TLS之前的HELO造成了恐慌称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并像这样使用它,但有一些学习曲线显然还没有结束。

+0

我会检查/ etc/hosts并确保hostname(来自smtp.SendMail)指向服务器的外部IP地址,而不是127.0.0.1。 –

+0

hostname等于两个呼叫的服务器的fqdn。 主机文件是正确的,我的理解使用的语法,但我是新来设置这样的相关线是 127.0.0.1 localhost example.com –

+0

我认为这是问题所在。如果exam​​ple.com解析为127.0.0.1,并通过smtp将邮件发送到example.com,则发送IP地址的反向查找将为127.0.0.1 localhost。我会尝试在10.77.88.99处指向example.com(替换真正的外部可达IP地址)。该地址的第一个名称将显示在您的通过线 –

回答

1

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

现有条目是:

127.0.0.1 localhost example.com 

此更改为:

127.0.0.1 example.com localhost 

解决了这个问题,而不是打破了本地主机需要正确地评估现有的服务。

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

<remote ip> <hostname> 

注:虽然我测试了一下从我的地方发展呼唤最后一部分建立我们的生产服务器和它的工作,它不是一个100%测试的解决方案。

非常感谢大家的帮助,我希望我的这个错误能够帮助任何其他未来发生类似错误的人。