【问题标题】:Sending email through gmail with Python使用 Python 通过 gmail 发送电子邮件
【发布时间】:2015-09-28 09:59:22
【问题描述】:

所以我已经尝试了至少 5-10 个在线示例来发送电子邮件,但我一直收到同样的错误。

Traceback (most recent call last):
  File "C:/Users/alxu/Project/LogFilter.py", line 88, in ?
    smtpserver = smtplib.SMTP("smtp.gmail.com",587)
  File "C:\Python24\lib\smtplib.py", line 244, in __init__
    (code, msg) = self.connect(host, port)
  File "C:\Python24\lib\smtplib.py", line 292, in connect
    for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
socket.gaierror: (11004, 'getaddrinfo failed')

我使用的最后一个示例代码是这样的......

import smtplib

to = 'mkyong2002@yahoo.com'
gmail_user = 'mkyong2002@gmail.com'
gmail_pwd = 'yourpassword'
smtpserver = smtplib.SMTP("smtp.gmail.com",587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(gmail_user, gmail_pwd)
header = 'To:' + to + '\n' + 'From: ' + gmail_user + '\n' + 'Subject:testing \n'
print header
msg = header + '\n this is test msg from mkyong.com \n\n'
smtpserver.sendmail(gmail_user, to, msg)
print 'done!'
smtpserver.close()

我使用的是 Python 2.4.3。

编辑:McAfee 具有主机入侵防护功能,因此我每次尝试执行此操作时都会阻止它。

【问题讨论】:

  • @alfasin 我尝试了帖子中的建议。我打开了主机文件,然后添加了值。 0:0.. 开始时不在我的主机文件中。
  • 127.0.0.1 smtp.gmail.com ::1 smtp.gmail.com 对吗?
  • @alfasin 这就是我的主机名的意思
  • 您是否在使用公司代理?

标签: python email python-2.x


【解决方案1】:

由于您使用公司代理,您无法直接连接到任何外部服务器,您需要通过代理连接。在这种情况下,您尝试连接到使用端口 25 或 587 的 SMTP 服务器。我假设您使用不阻止 SMTP 端口的 HTTP 代理。如果您的公司代理阻止了这些端口,那么您将无法连接到服务器。

smtplib 模块不包含通过代理连接到 SMTP 服务器的功能。作为一种解决方法,我编写了自定义类 ProxySMTP,我已经发布了 here 以及如何使用它的说明。

让我知道它是否适合你。

【讨论】:

    【解决方案2】:

    您的最后一个示例代码应该可以工作。您需要做的一件事是通过转到以下链接确保您允许访问不太安全的应用程序。

    google settings for secure apps

    这样做的原因是 google 将此类自动电子邮件脚本标记为不太安全。您还应该意识到风险。如果您不需要它,请务必更改此设置。

    【讨论】:

    • 我改变了它并测试了它..仍然得到同样的错误。我认为@zenadix 是正确的。
    • 我之前更改设置时,并没有立即生效。我不知道为什么需要时间,但没有任何其他更改,它在一天后又开始工作。
    猜你喜欢
    • 2016-09-09
    • 2020-10-14
    • 2012-10-01
    • 1970-01-01
    • 2012-01-07
    • 2023-03-19
    • 2019-02-04
    相关资源
    最近更新 更多