Flask-mail 邮件发送模块
说明:当需要对用户进行登录时的邮箱验证时,我们可以通过 Flask-mail 来实现该需求。
1. 安装配置
pip install Flask-Mail
2. flask-mail,载入和初始化
from flask_mail import Mail
mail = Mail()
3. flask-mail SMTP邮箱服务器配置
配置 | 默认值 | 说明 |
MAIL_SERVER | localhost | 电子邮箱服务器的主机名和IP地址 |
MAIL_PORT | 25 | 电子邮箱服务的端口 |
MAIL_USE_SSL | False | 启用传输层 TSL 协议 |
MAIL_USERNAME | None | 邮件账户用户名 |
MAIL_PASSWORD | None | 邮件账户的密码 |
FLASKY_MAIL_SENDER | None | 设置成与 MAIL_USERNAME 相同的值 (自定义添加的参数) |
配置qq企业邮箱服务器:
MAIL_SERVER = 'smtp.qq.com',
MAIL_PROT = 465,
MAIL_USE_TLS = True,
MAIL_USE_SSL = False,
MAIL_USERNAME = os.environ.get('MAIL_USERNAME'),
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
4.发送邮箱的接口函数
def send_email(self, register_user):
"""
Method for sending the registration Email to the user
"""
msg = Message()
msg.subject = self.email_subject
url = url_for(
".activation",
_external=True,
activation_hash=register_user.registration_hash,
)
msg.html = self.render_template(
self.email_template,
url=url,
username=register_user.username,
first_name=register_user.first_name,
last_name=register_user.last_name,
)
msg.recipients = [register_user.email]
# 获取当前 app 对象:
app = current_app._get_current_object()
# 增加一个 sender(发送者邮箱地址), 否则报错
msg.sender = app.config.get('FLASKY_MAIL_SENDER')
try:
send_email(msg)
except Exception as e:
log.error("Send email exception: {0}".format(str(e)))
return False
return True
代码说明:
- 实例化一个 Message 对象并对其参数进行填充
- 调用 send_email 方法,该方法如下:
def send_email(msg):
app = current_app._get_current_object()
thr = Thread(target=send_async_email, args=[app, msg])
thr.start()
return thr
def send_async_email(app, msg):
with app.app_context():
mail.send(msg)
- 通过开启一个线程的方式来直接对结果进行返回,以达到与异步类似的效果。
参考文档: