2016-05-19 5 views
2

私はPython経由でamazon SESに電子メールを送りたいと思っています。アマゾンSESに電子メールを送る最速の方法は何でしょうか?

私は約10メール/秒(実際には2倍の理想的な)の送信レートに到達したいと思います。

私が見つけたのは、Python smtplibライブラリを使って直接接続すると、事態が非常に遅くなることです。ここで私はこのコードを使用する場合

def login_to_amazon(port=587, secure=True, options=(25, 465, 587)): 
    s1 = smtplib.SMTP('email-smtp.us-east-1.amazonaws.com', port) 
    if secure: 
     s1.starttls() 
    s1.login('aws_key', 'aws_secret') 
    return s1 

def send_multiple_emails(msg, number, port=587): 
    s1 = login_to_amazon(port) 
    for _ in range(number): 
     s1.sendmail('[email protected]', '[email protected]', str(msg)) 

# I send 5 mails here 
send_multiple_emails('about 100 byte message', number=5) 

何が起こるかのpycallgraphとボトムラインを生成したグラフだ:それは5通の電子メールを送信するために4.5秒かかります。今

from boto import ses 
c1 = ses.connect_to_region('us-east-1', aws_access_key_id='public_key', aws_secret_key='secret') 

def boto_send_mail(nonce=None): 
    if nonce is None: 
     nonce = str(datetime.now()) 
    return c1.send_email(source, subject='testing {}'.format(str(nonce)), body=str(nonce), to_addresses=source) 

私はboto_send_mail 5回を呼び出すプロファイルあれば、それは5通の電子メールを送信するために2秒かかる: sending 5 emails through SMTH to amazon SES

は、それから私はのbotoインタフェースを試してみました。現時点で enter image description here

、私はちょうど5通のメールのスパイクを送信する場合、それは私をブロックしませんが、私は、一日あたり200通の電子メール、および毎秒1通の電子メールを送信することができますので、これは私ができるすべての分析であります行う。

誰でもこれをよりうまくやっていますか?私は現在の2倍以上の速度が必要です。

複数のプロセス/スレッド/ asyncioを使用する必要がありますか?AWS SES REST APIですか?

アドバイスが役に立ちます

+0

あまりにも多くのISPを送信すると、あなたのアカウントにスパム送信者としてタグを付けることがあります。 – Marichyasana

答えて

1

boto3を試しましたか?私はそれが速くなるか分からない。

The recommendation is to use https, multiple hosts, and multiple threads。あなたが一斉にテンプレート化メールを送信することができます別のメールプロバイダに行くに終わるかもしれない

(24、33-34、50-51一人のユーザーが1000通の電子メール/秒に言及参照)。

3

複数のプロセス/スレッド/ asyncioを使用する必要がありますか?AWS SES REST APIですか?

はい。

SMTPを使用するよりも、1秒あたりに多くのメッセージを送信できます。

サーバとSES SMTPエンドポイントの間に意味のある遅延がある場合、特にSMTPでメッセージを送信するために、まずTLSをネゴシエートする必要があるためSMTPがAPIを使用するよりも処理が遅くなります。プロトコル自体には、あなたのメールクライアントコードとサーバ(例えば、HELO/EHLOMAILRCPTDATAQUIT)との間のいくつかの往復のやりとりが必要であり、多くの往復時間を浪費しますこの廃棄物はネットワークの待ち時間に依存します。クエリAPIは(技術的には、SESが真のREST APIを持っていません)TLSの設定を除き、これらの時間浪費のいずれかを持っていない - それは単純な要求/応答だ - とあなたのクライアントは、おそらくより簡単でTLSセッションを再利用することができますHTTPキープアライブ。

あなたのスタックがどれほど速くても、あなたが自分自身を警戒する責任がある場合でも、SESには送信制限があります。 SESがあなたのメールの品質と苦情やバウンスの不足を観察するにつれて、制限が小さくなり、自動的に増加します...しかし最適化するときは注意してください。許可されたリクエスト数をオーバーランさせたくありません。

関連する問題