2017-05-19 3 views
-1

Ich habe gerade mit Python auf Flask begonnen. Ich möchte erfahren, wie Sie am besten E-Mails von Flask mit dem Amazon SES versenden können.Amazon SES mit Flask Python

Ich habe die boto gesehen, aber es ist eine Schnittstelle zu allen Amazon Services. Ich habe auch einige andere benutzerdefinierte Beispiele gesehen.

Was ist die beste, einfache und effiziente Möglichkeit, E-Mails in Flask zu senden?

Danke.

Antwort

2

Ich hatte eine ähnliche Situation. Sie sollten Send Formatted Email Using the Amazon SES API.

Sie könnten Boto verwenden, wie Sie vorgeschlagen haben. Aber das ist nicht so aktualisiert wie boto3. Weitere Informationen here.

Hier ist, was ich mit Erfolg gemacht habe.

Fügen Sie die folgenden Schlüssel in Ihrem 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]' 

Hinweis: Die E-Mail-Quelle (Sender) muss eine verifizierte E-Mail-Adresse sein, wie in der SES-Konsole konfiguriert.

Dann irgendwo im Code, eine Funktion wie folgt definieren:

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

Natürlich können Sie weitere Parameter ses.send_email hinzufügen, wenn Sie komplexere Nachrichten benötigen.

Dann können Sie E-Mails wie diese an:

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 
      ) 

Verbesserungen:

Sie einen Thread können Sie die E-Mail als asynchrone Aufgabe senden. Dies ist besser erklärt in The Flask Mega-Tutorial, Teil XI: Email Support, von Miguel Grinberg. Das ist tatsächlich was ich benutze.

Oder, vielleicht besser, könnten Sie Sellerie dafür verwenden. Aber da du im Amazonas-Ökosystem bist, würde ich SQS verwenden.

Weitere Optionen sind:

  • Sie könnten Flask-Mail verwenden und konfigurieren SES über die SMTP-Schnittstelle zuzugreifen. Dies ist eine allgemeinere Lösung (kann auf andere Dienste zugreifen, nicht nur auf SES), aber wenn Sie bei Amazon bleiben, ist es besser, die API zu verwenden.
  • Es gibt Optionen wie Flask-SES, aber ich glaube nicht, dass Sie es brauchen. Es umschließt im Wesentlichen die send_mail Funktion.
+0

Sie finden eine vollständigere Liste der 'send_mail' Parameter [hier] (https://boto3.readthedocs.io/en/latest/reference/services/ses.html#SES.Client.send_email) und [hier] (http://docs.aws.amazon.com/ses/latest/APIReference/API_SendEmail.html). –