2011-07-04 21 views
3

私はTorando IoLoopと接続するためにpython async SMTPクライアントを探しています。私は単純なimplement(http://tornadogists.org/907491/)が見つかりましたが、それはパフォーマンスの問題をもたらすかもしれないので、ブロッキングソリューションです。Tornado non-blocking SMTPクライアント

誰もがTornadoのSMTPクライアントをブロックしていませんか?コードスニペットも非常に便利です。

答えて

2

私はスレッドとキューに基づいて解決策を書いています。竜巻のプロセスごとに1つのスレッド。このスレッドはワーカーであり、キューから電子メールを取得し、SMTP経由で送信します。それをキューに追加することで、竜巻アプリケーションから電子メールを送信します。シンプルで簡単。私はちょうどioloopベースのSMTPクライアントを手早く - ちょうどFYI link

+0

ワーカースレッドのソリューションは、非同期の解決策がないうちに非常にエレガントなようです。コードをコミュニティと共有しましたか? – berni

+0

これは簡単な解決方法です。本番環境では未使用:[link] –

3

はここでGitHubの上のサンプルコードです。私はそれが生産テストされているとは言えませんが、近い将来になるでしょう。

https://gist.github.com/1358253

3

https://github.com/equeny/tornadomail - ここではioloop竜巻するポートDjangoのメールシステムとのpythonたりするsmtplibに私attempです。 フィードバックをお寄せいただきありがとうございます。

2

私は私自身のSMTPサーバーを使用しますが、これは誰かに有用であろう考え出していないよ:

私はちょうど私のアプリに送信する電子メールを追加しなければなりませんでした。ウェブの電子メールサービスのサンプルPythonコードのほとんどはブロッキングデザインを使用していますので、使用したくありません。

MailchimpのMandrillはHTTP POSTリクエストを使用しているため、TornadoのデザインでAsyncファッションに適合します。

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": "[email protected]", 
       "from_name": "Hello Team", 
       "to":[{"email": "[email protected]"}] 
      } 
     } 

     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') 
3

私は職場で同じ問題の解決策を探していました。容易に利用できる解決策がなかったので、私はPython smtplibを竜巻ノンブロッキングIOStreamに基づく実装に移植しました。シンタックスはsmtplibのシンタックスを可能な限り近づけます。

# create SMTP client 
s = SMTPAsync() 
yield s.connect('your.email.host',587) 
yield s.starttls() 
yield s.login('username', 'password') 
yield s.sendmail('from_addr', 'to_addr', 'msg') 

現在のところ、Python 3.3以上をサポートしています。ここにあるのはgithub repo

関連する問題