2017-05-19 31 views
-1

FlaskでPythonを始めました。 FlaskからAmazon SESを使用して電子メールを送信する最善の方法は何かを知りたいですか?Amazon SES with Flask Python

私はbotoを見ましたが、それはすべてのAmazonサービスのインターフェイスです。私は他のカスタム例も見てきました。

Flaskで電子メールを送信するには、どのような方法が最適ですか?

ありがとうございました。

答えて

2

私は同様の状況でした。 Send Formatted Email Using the Amazon SES APIです。

提案したように、botoを使用できます。しかし、これはboto3ほど更新されていません。詳細情報here

これは私が成功したことです。

はあなたのapp.configで次のキーを含める:

# Amazon Web Services credentials 
AWS_ACCESS_KEY_ID = 'your access key id' 
AWS_SECRET_ACCESS_KEY = 'your secret access key' 

# Amazon Simple Email Service 
SES_REGION_NAME = 'us-west-2' # change to match your region 
SES_EMAIL_SOURCE = '[email protected]' 

注:SESコンソールで設定された電子メールの送信元(送信者)は、検証済みのメールアドレスでなければなりません。

その後、どこかにあなたのコードでは、このような関数を定義します。もちろん

import boto3 

def send_email(app, recipients, sender=None, subject='', text='', html=''): 
    ses = boto3.client(
     'ses', 
     region_name=app.config['SES_REGION_NAME'], 
     aws_access_key_id=app.config['AWS_ACCESS_KEY_ID'], 
     aws_secret_access_key=app.config['AWS_SECRET_ACCESS_KEY'] 
    ) 
    if not sender: 
     sender = app.config['SES_EMAIL_SOURCE'] 

    ses.send_email(
     Source=sender, 
     Destination={'ToAddresses': recipients}, 
     Message={ 
      'Subject': {'Data': subject}, 
      'Body': { 
       'Text': {'Data': text}, 
       'Html': {'Data': html} 
      } 
     } 
    ) 

あなたがより複雑なメッセージが必要な場合、あなたはses.send_emailに多くのパラメータを追加することができます。

次に、あなたは、このようなメールを送ることができます。

recipients = ['[email protected]'] 
subject = 'Thanks for registering' 

# You can render the message using Jinja2 
html = render_template('email.html', name='John Doe') 

send_email(current_app, 
      recipients=recipients, 
      subject=subject, 
      html=html 
      ) 

改良:

をあなたは非同期タスクとして電子メールを送信するためにスレッドを使用することができます。これは、The Flask Mega-Tutorial、Part XI:Email Support(Miguel Grinberg著)でより詳しく説明されています。これは実際に私が使っているものです。

または、これはセロリを使用するとよいでしょう。しかし、あなたがAmazonのエコシステムにいるので、私はSQSを使用します。

その他のオプションが含まれます:

  • あなたはフラスコ-Mailを使用してSMTPインターフェース経由でSESにアクセスするように設定することができます。これはもっと一般的な解決策です(SESだけでなく他のサービスにもアクセスできますが、Amazonに固執する場合はAPIを使用する方がよい)。
  • Flask-SESのようなオプションがありますが、私はあなたがそれを必要とは思わないと思います。基本的にsend_mail関数をラップします。
+0

[send_mail]パラメータの詳細なリストはこちら[https://boto3.readthedocs.io/ja/latest/reference/services/ses.html#SES.Client.send_email] [ここ](http://docs.aws.amazon.com/ses/latest/APIReference/API_SendEmail.html)を参照してください。 –