Flask:Flask-Mail扩展

Python内置了对邮件发送和接收的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件,但是操作方式过于繁琐,在Flask项目中推荐使用Flask-Mail扩展进行邮件的发送。

通过内置模块发送邮件

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件smtplib负责发送邮件。

1
2
3
4
5
6
7
8
9
10
11
from email.mime.text import MIMEText

msg = MIMEText('这是一个测试邮件', 'plain', 'utf-8')
msg['From'] = "harmel@163.com"
msg['Subject'] = "邮件标题"

import smtplib
server = smtplib.SMTP("smtp.163.com", 25)
server.login("harmel", "**********")
server.sendmail("harmel@163.com", ["85601852@qq.com"], msg.as_string())
server.quit()

使用Flask-Mail扩展

安装

1
pip install flask-mail

配置邮件服务器

1
2
3
4
app.config["MAIL_SERVER"] = "smtp.163.com"
app.config["MAIL_PORT"] = 25 # 不配置默认为25
app.config["MAIL_USERNAME"] = "用户名"
app.config["MAIL_PASSWORD"] = "密码"

注: 对于敏感信息千万不要写死在代码中,可以配置在环境变量中,代码中通过 os.environ.get(“环境变量名”) 来获取

发送邮件

1
2
3
4
5
6
7
8
9
10
from flask_mail import Mail, Message

mail = Mail(app)

@app.route("/mail")
def mail():
msg = Message("主题", sender="harmel@163.com", recipients=["85601852@qq.com"])
msg.html = "正文"
mail.send(msg)
return "OK"

由于发送邮件是一个耗时操作,我们可以开启一个线程来操作,mail.send(msg)底层依赖current_app,因此需要激活程序上下文

1
2
with app.app_context():
mail.send(msg)

  • 本文作者: Harmel
  • 本文链接: http://www.harmel.cn/2018/08/flask-mail.html
  • 版权声明: 文章如无特别说明,则表明该文章为原创文章,如需要转载,请注明出处。
  • 本站说明: 本站使用阿里云服务器,如果您喜欢我的网站,欢迎收藏,能捐赠支持一下就再好不过了。