使用Python通过gmail发送电子邮件

时间:2015-07-09 20:19:51

标签: python email python-2.x

所以我在线尝试了至少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。

编辑:迈克菲拥有主机入侵防御功能,所以我一直试图阻止它。

2 个答案:

答案 0 :(得分:1)

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

google settings for secure apps

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

答案 1 :(得分:1)

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

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

让我知道它是否适合你。