2012-01-31 144 views
10

我想诊断为什么通过Amazon SES发送电子邮件不通过python工作。亚马逊SES SMTP Python使用

以下示例演示了此问题,其中userpass设置为适当的凭据。

>>> import smtplib 
>>> s = smtplib.SMTP_SSL("email-smtp.us-east-1.amazonaws.com", 465) 
>>> s.login(user, pw) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.6/smtplib.py", line 549, in login 
    self.ehlo_or_helo_if_needed() 
    File "/usr/lib/python2.6/smtplib.py", line 510, in ehlo_or_helo_if_needed 
    (code, resp) = self.helo() 
    File "/usr/lib/python2.6/smtplib.py", line 372, in helo 
    (code,msg)=self.getreply() 
    File "/usr/lib/python2.6/smtplib.py", line 340, in getreply 
    raise SMTPServerDisconnected("Connection unexpectedly closed") 
smtplib.SMTPServerDisconnected: Connection unexpectedly closed 

此消息不是特别有用,并尝试其他vraiations,但似乎无法使其工作。

我可以用这些设置使用我的thunderbird电子邮件客户端发送电子邮件,所以我的假设是我的使命与TLS相关。

回答

4

我确定这个问题是由时间引起的。因为我从命令行执行该代码,服务器会超时。如果我把它放到python文件中并运行它,它会执行得足够快以确保发送消息。

8

完整的例子:

import smtplib 

user = '' 
pw = '' 
host = 'email-smtp.us-east-1.amazonaws.com' 
port = 465 
me = u'[email protected]' 
you = ('[email protected]',) 
body = 'Test' 
msg = ("From: %s\r\nTo: %s\r\n\r\n" 
     % (me, ", ".join(you))) 

msg = msg + body 

s = smtplib.SMTP_SSL(host, port, 'yourdomain') 
s.set_debuglevel(1) 
s.login(user, pw) 

s.sendmail(me, you, msg) 
11

我不认为SMTP_SSL工作了与SES。必须使用starttls()

smtp = smtplib.SMTP("email-smtp.us-east-1.amazonaws.com") 
smtp.starttls() 
smtp.login(SESSMTPUSERNAME, SESSMTPPASSWORD) 
smtp.sendmail(me, you, msg)