Amazon SES SMTP Python Использование - PullRequest
10 голосов
/ 01 февраля 2012

Я пытаюсь выяснить, почему отправка электронной почты через Amazon SES не работает через python.

Следующий пример демонстрирует проблему, где user и pass установлены на соответствующие учетные данные.

>>> 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

Это сообщение не особенно полезно, и оно пробовало другие варианты, но не может заставить его работать.

Я могу отправлять электронную почту, используя мой почтовый клиент Thunderbird с этими настройками, поэтому я предполагаю, что я являюсь чем-то связанным с TLS.

Ответы [ 3 ]

11 голосов
/ 10 сентября 2012

Я не думаю, что 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)
8 голосов
/ 20 февраля 2012

Полный пример:

import smtplib

user = ''
pw   = ''
host = 'email-smtp.us-east-1.amazonaws.com'
port = 465
me   = u'me@me.com'
you  = ('you@you.com',)
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)
4 голосов
/ 01 февраля 2012

Я определил, что эта проблема вызвана синхронизацией.Поскольку я выполнял этот код из командной строки, время ожидания сервера истекло.Если я помещу его в файл Python и запустлю, он будет выполнен достаточно быстро, чтобы гарантировать отправку сообщения.

...