编程语言
首页 > 编程语言> > 亚马逊SES与Flask Python

亚马逊SES与Flask Python

作者:互联网

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

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

在Flask中发送电子邮件的最佳,简单和有效方法是什么?

谢谢.

解决方法:

我有类似的情况.你应该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 = '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中对此进行了更好的解释.这实际上就是我正在使用的.

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

其他选择包括:

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

标签:amazon-ses,python,amazon-web-services,flask
来源: https://codeday.me/bug/20190828/1752170.html