使用 Python 通过 gmail 发送电子邮件
Sending email through gmail with Python
所以我已经尝试了至少 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 具有主机入侵防护功能,所以我每次尝试这样做时它都会阻止它。
您的最后一个示例代码应该可以工作。您需要做的一件事是通过转到以下 link.
确保您允许访问安全性较低的应用程序
google settings for secure apps
原因是 google 将此类自动电子邮件脚本标记为不太安全。您还应该了解风险。如果您不需要它,请确保将此设置改回来。
由于您在公司代理后面,您无法直接连接到任何外部服务器,您需要通过 代理连接。在这种情况下,您正在尝试连接到使用端口 25 或 587 的 SMTP 服务器。我假设您使用的是不阻止 SMTP 端口的 HTTP 代理。如果您的公司代理阻止了这些端口,那么您将无法连接到服务器。
smtplib
模块不包含通过代理连接到 SMTP 服务器的功能。作为解决方法,我编写了自定义 class ProxySMTP
,我已将其发布 here 以及如何使用它的说明。
让我知道它是否适合你。
所以我已经尝试了至少 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 具有主机入侵防护功能,所以我每次尝试这样做时它都会阻止它。
您的最后一个示例代码应该可以工作。您需要做的一件事是通过转到以下 link.
确保您允许访问安全性较低的应用程序google settings for secure apps
原因是 google 将此类自动电子邮件脚本标记为不太安全。您还应该了解风险。如果您不需要它,请确保将此设置改回来。
由于您在公司代理后面,您无法直接连接到任何外部服务器,您需要通过 代理连接。在这种情况下,您正在尝试连接到使用端口 25 或 587 的 SMTP 服务器。我假设您使用的是不阻止 SMTP 端口的 HTTP 代理。如果您的公司代理阻止了这些端口,那么您将无法连接到服务器。
smtplib
模块不包含通过代理连接到 SMTP 服务器的功能。作为解决方法,我编写了自定义 class ProxySMTP
,我已将其发布 here 以及如何使用它的说明。
让我知道它是否适合你。