通过python应用程序通过gmail发送电子邮件

时间:2012-03-15 09:30:24

标签: python email python-2.7

如标题所示,我无法通过python应用程序通过我的Gmail帐户发送电子邮件。我已在网上搜索解决方案,但似乎没有解决它,我想我可能会问这里。 我的代码如下:

FROMADDR = "myemail@gmail.com"
LOGIN    = FROMADDR
PASSWORD = "mypass"
TOADDRS  = "varis81@hotmail.com"
msg = "Test message"
server = smtplib.SMTP('smtp.gmail.com', 587)
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.login(LOGIN, PASSWORD)
server.sendmail(FROMADDR, TOADDRS, msg)
server.quit()
print "E-mail succesfully sent"

我收到消息:

socket.error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

我尝试了不同的端口,但它也不起作用。我也尝试过hotmail但它会导致同样的问题。我在使用PyDev在Eclipse上开发的Windows 7机器上使用Python 2.7(不要问:))。

任何帮助都会很棒! 提前谢谢。

2 个答案:

答案 0 :(得分:1)

好吧,既然我无法发表评论,我将不得不尝试答案..

由此判断:Python SMTP Errno 10060 暂停可能会有所帮助吗?

答案 1 :(得分:1)

我在我的一台服务器上使用相同的构造。我的代码如下。

唯一的区别是'.starttls()之后的额外.ehlo()。这个应该不是问题;来自RFC

5.2 Result of the STARTTLS Command

The client SHOULD send an EHLO command as the first
command after a successful TLS negotiation.

根据RFC,如果客户端在ehlo之后未发送starttls,则服务器不应断开连接,但Google可能会对其SMTP服务器施加更严格的限制。我先检查一下。 (我看到提供商在减少垃圾邮件的情况下收紧这些条件,例如见Mailinator's 2007 writeup。)

它也可以是过滤端口 - 尝试在REPL中运行代码并确认哪条线是异常,如果它是connect()您将知道它的网络。如果是之后,可能会使用smtplib.

值得注意的是,我偶尔会遇到不洁的关闭,导致.close()左右的尝试/除外。

import smtplib
s = smtplib.SMTP()
s.connect("smtp.gmail.com")
s.ehlo()
s.starttls()
s.ehlo()
s.login("from@gmail.com", "frompass") 
s.sendmail("fromname@gmail.com", toAddr, bytes)
try:
    s.close()
except: pass