我正在尝试从 SMTP 切换到 AWS SES,以便在 Flask 应用程序中发送电子邮件,该应用程序使用 Flask-Security-Too 进行用户身份验证和电子邮件管理。
我已实施以下配置更改来集成 AWS SES:
app.config['SECURITY_MAIL_UTIL'] = SESMailUtil(app)
app.config['SECURITY_EMAIL_SENDER'] = read_config("EMAIL", 'notifications').get("sender_name")
app.config['SECURITY_EMAIL_SUBJECT_REGISTER'] = 'Welcome! Confirm your email'
SESMailUtil class:
from app_utils import get_ses_client
from flask_security.mail_util import MailUtil
class SESMailUtil(MailUtil):
def __init__(self, app=None):
super().__init__(app)
def send_mail(self, template, subject, recipient, sender, body, html, user, **kwargs):
ses_client = get_ses_client()
try:
response = ses_client.send_email(
Source=sender,
Destination={
'ToAddresses': [recipient]
},
Message={
'Subject': {'Data': subject},
'Body': {
'Text': {'Data': body},
'Html': {'Data': html}
}
}
)
print(f"Email sent! Message ID: {response['MessageId']}")
except Exception as e:
print(f"Error sending email: {e}")
但是,当我运行代码时,遇到以下错误: 引发 ValueError("未配置电子邮件扩展名") ValueError:未配置电子邮件扩展名
正确的配置变量是 SECURITY_MAIL_UTIL_CLS - 传入类名,它将作为 Flask-security init_app() 的一部分进行实例化。您还可以将类名作为构造函数的一部分传递。