在我的一个项目中,我必须使用外部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')}
答案 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]')