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.
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). –