【问题标题】:smtplib.SMTPRecipientsRefused: Helo command rejected: need fully-qualified hostnamesmtplib.SMTPRecipientsRefused:Helo 命令被拒绝:需要完全限定的主机名
【发布时间】:2017-12-01 04:05:45
【问题描述】:

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

我在本地 windows 计算机上使用 python 2.7.13(目前最新)进行测试,并使用 aws 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')}

【问题讨论】:

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


    【解决方案1】:

    问题是(曾经)EC2 实例配置了本地 FQDN。绑定的是内部域名系统,所以远程smtp服务器无法解析和确认。

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

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

    方括号是必须的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 2021-01-26
      • 2014-05-29
      • 2016-09-26
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多