Я не использую свой собственный SMTP-сервер, но подумал, что это будет кому-то полезно:
Мне просто нужно добавить отправку электронной почты в мое приложение. Большая часть примера кода Python для веб-служб электронной почты использует дизайн блокировки, поэтому я не хочу его использовать.
Mailchimp's Mandrill использует HTTP-запросы POST, поэтому он может работать в асинхронном режиме, вписываясь в дизайн Tornado.
class EmailMeHandler(BaseHandler):
@tornado.web.asynchronous
@tornado.gen.engine
def get(self):
http_client = AsyncHTTPClient()
mail_url = self.settings["mandrill_url"] + "/messages/send.json"
mail_data = {
"key": self.settings["mandrill_key"],
"message": {
"html": "html email from tornado sample app <b>bold</b>",
"text": "plain text email from tornado sample app",
"subject": "from tornado sample app",
"from_email": "hello@example.com",
"from_name": "Hello Team",
"to":[{"email": "sample@example.com"}]
}
}
body = tornado.escape.json_encode(mail_data)
response = yield tornado.gen.Task(http_client.fetch, mail_url, method='POST', body=body)
logging.info(response)
logging.info(response.body)
if response.code == 200:
self.redirect('/?notification=sent')
else:
self.redirect('/?notification=FAIL')