smtplib.SMTPRecipientsRefused:Helo命令被拒绝:需要完全限定的主机名

时间:2017-06-27 23:32:41

标签: python amazon-web-services amazon-ec2 smtp

在我的一个项目中,我必须使用外部smtp基础结构创建python应用程序以从本地计算机发送电子邮件报告。

我在本地Windows计算机上使用python 2.7.13(目前最新)进行测试,并使用EC2 windows实例进行生产(相同的python版本)。

代码是:(简化版)

s = smtplib.SMTP('smtp.host.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login('email@domain.com', 'password');
s.sendmail(from_to, from_to, m.as_string())
s.quit()

一切都在本地计算机上运行良好,但在亚马逊ec2上运行时,我得到了:

smtplib.SMTPRecipientsRefused: {'email@domain.com': (450, '4.7.1 <MY-INSATNCE-ID.aws-region.compute.internal>: Helo command rejected: Host not found')}

1 个答案:

答案 0 :(得分:0)

问题是(是)EC2实例已配置本地FQDN。它被绑定到内部域名系统,因此远程smtp服务器无法解析并确认它。

另一方面,本地计算机使用 unknown FQDN仅传递其本地IP,这对于smtp服务器是可以的。我不确定这不是安全问题。

可以通过向local_hostname构造函数添加SMTP参数来解决此问题。

方括号是强制性的。

s = smtplib.SMTP('smtp.host.com', 587)

s = smtplib.SMTP('smtp.host.com', 587, '[127.0.0.1]')