1聪富、Flask通過flask-mail插件支持郵件發(fā)送
pip install flask-mail
pip install flask-script
2盈罐、下述將從兩種方式驗證flask-mail發(fā)送郵件柄慰,一種是腳本執(zhí)行合蔽,另一種是集成在應用(程序)中發(fā)送郵件
2.1腳本方式暮的,emails.py
from flask import Flask
from flask_mail import Message,Mail
from flask_script import Manager,Shell
import os
app=Flask( __name__)
manager=Manager(app)
mail=Mail(app)
app.config['MAIL_SERVER']="smtp.163.com" #各個郵件服務商MAIL_SERVER不同
app.config['MAIL_PORT']=465
app.config['MAIL_USE_SSL']=True
app.config['MAIL_USERNAME']=os.environ.get("MAIL_USERNAME")
app.config['MAIL_PASSWORD']=os.environ.get("MAIL_PASSWORD")
(flask-venv) $export MAIL_USERNAME="gyc1412@163.com"
(flask-venv) $export MAIL_PASSWORD="xxxxxxx"
python emails.py shell
>>>from flask_mail import Message
>>>from emails import mail
>>>msg=Message("test subject",sender="gyc1412@163.com",
recipients=['guangyichen@sina.cn'])
>>>msg.body="text body"
>>>msg.html='<b>HTML</b>body'
>>>with app.app_context():
... mail.send(msg)
...
>>>
2.2 郵件發(fā)送集成到應用的方式具篇,其中用到了多線程技術(shù)(threading)
#encoding=utf-8
from flask import Flask,render_template
from flask_mail import Message,Mailfrom threading
import Threadfrom flask_script import Manager,Shell
import os app=Flask(__name__)
app.config['MAIL_SERVER']='smtp.163.com'
app.config['MAIL_PORT']=465
app.config['MAIL_USE_TLS']=False
app.config['MAIL_USE_SSL']=True
app.config['MAIL_USERNAME']=os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD']=os.environ.get('MAIL_PASSWORD')
mail=Mail(app)manager=Manager(app)
def send_async_email(app,msg):
with app.app_context(): #激活上下文?
mail.send(msg)
@app.route('/')
def index():
msg=Message('主題',sender=os.environ.get('MAIL_USERNAME'),
recipients=['guangyichan@gmail.com'])
msg.body="文本body"
msg.html='<b>HTML</b>body'
thread=Thread(target=send_async_email,args=[app,msg])
thread.start()
mail.send(msg)
return '異步郵件發(fā)送成功募逞。'
if __name__ == '__main__':
manager.run()
運行:python emails.py runserver -h 0.0.0.0 -p9090 頁面刷新即可發(fā)送郵件