Amazon SES with Flask Python



我刚刚在Flask上开始使用Python。我想了解使用 Amazon SES 从 Flask 发送电子邮件的最佳方式是什么?

我见过boto,但它是所有亚马逊服务的接口。我也看到了其他一些自定义示例。

在 Flask 中发送电子邮件的最佳、简单和高效方式是什么?

谢谢。

我也有类似的情况。您应该使用 Amazon SES API 发送格式化的电子邮件。

你可以按照你的建议使用boto。但这并不像 boto3 那样更新。更多信息在这里。

这是我成功所做的。

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 = 'verified.email@example.com'

注意:电子邮件源(发件人)必须是在 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 = ['john.doe@example.com']
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
)

改进:

您可以使用线程将电子邮件作为异步任务发送。这在Miguel Grinberg的The Flask Mega-Tutorial,Part XI:Email Support中得到了更好的解释。这实际上是我正在使用的。

或者,也许更好,你可以为此使用芹菜。但由于您在亚马逊生态系统中,我会使用 SQS。

其他选项包括:

  • 您可以使用Flask-Mail并配置为通过SMTP接口访问SES。这是一个更通用的解决方案(可以访问其他服务,而不仅仅是SES),但如果你要坚持使用亚马逊,最好使用API。
  • 有像Flask-SES这样的选项,但我认为你不需要它。它基本上包装了send_mail函数。

我也刚刚遇到了这个很棒的教程(写于 2020 年),其中详细介绍了如何创建与 Amazon SES 集成的简单 Flask 应用程序:

https://qxf2.com/blog/sending-email-through-amazon-ses-with-flask-app/

最新更新