上篇文章我們學(xué)習(xí)了Flask框架——Flask-WTF表單:文件上傳零渐、驗(yàn)證碼,這篇文章我們學(xué)習(xí)Flask框架——Flask-Mail郵件。
Web應(yīng)用程序經(jīng)常需要向用戶(hù)展鸡、客戶(hù)端、管理員闷祥、運(yùn)維人員等相關(guān)人員發(fā)送郵件娱颊。在Flask框架中提供了Flask-Mail郵件庫(kù)來(lái)管理電子郵件的收發(fā)。
安裝Flask-Mail
執(zhí)行如下代碼安裝Flask-Mail:
pip install flask-mail
安裝后凯砍,可以執(zhí)行如下代碼查看Flask-Mail的信息:
pip show flask-mail
信息如下所示:
Name: Flask-Mail
Version: 0.9.1
Summary: Flask extension for sending email
Home-page: https://github.com/rduplain/flask-mail
Author: Dan Jacob
Author-email: danjac354@gmail.com
License: BSD
Location: c:\users\lin\desktop\flask-mail郵件\venv\lib\site-packages
Requires: blinker, Flask
Required-by:
配置Flask-Mail
在使用Flask-Mail之前箱硕,需要進(jìn)行配置。
創(chuàng)建Flask項(xiàng)目悟衩,其代碼如下所示:
from flask import Flask
from flask_mail import Mail
app =Flask(__name__)
app.config['MAIL_SERVER']='smtp.qq.com' #郵件服務(wù)器的名稱(chēng)/IP地址
app.config['MAIL_PORT'] = 465 #所用服務(wù)器的端口號(hào)
app.config['MAIL_USERNAME'] = 'yourmail@qq.com' #發(fā)件人的用戶(hù)名
app.config['MAIL_PASSWORD'] = '*******' #發(fā)件人的POP3/IMAP/SMTP服務(wù)的SSL連接客戶(hù)端授權(quán)碼
app.config['MAIL_USE_TLS'] = False #禁用傳輸安全層加密
app.config['MAIL_USE_SSL'] = True #啟用安全套接字層加密
mail = Mail(app) #創(chuàng)建郵件類(lèi)對(duì)象
if __name__ == '__main__':
app.run(debug = True)
這里我們是使用QQ郵箱作為發(fā)件郵箱剧罩。
QQ郵箱相關(guān)服務(wù)器信息:
服務(wù)器名稱(chēng) | 服務(wù)器地址 | SSL協(xié)議端口號(hào) | 非SSL協(xié)議端口號(hào) |
---|---|---|---|
IMAP | imap.qq.com | 993 | 143 |
SMTP | smtp.qq.com | 465/587 | 25 |
POP3 | pop.qq.com | 995 | 110 |
SSL連接客戶(hù)端授權(quán)碼可以按如下圖獲取:
下拉座泳,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)
開(kāi)啟POP3惠昔、IMAP/SMTP服務(wù)幕与,發(fā)送短信,
發(fā)送短信就會(huì)獲取到客戶(hù)端授權(quán)碼了镇防。
除了剛才我們?cè)贔lask程序中配置的參數(shù)啦鸣,還可以添加以下參數(shù):
- MAIL_DEBUG:支持自定義調(diào)試,默認(rèn)是Flask應(yīng)用程序的調(diào)試狀態(tài)来氧;
- MAIL_DEFAULT_SENDER:設(shè)置默認(rèn)發(fā)件人诫给;
- MAIL_MAX_EMAILS:設(shè)置要發(fā)送的最大郵件;
- MAIL_SUPPRESS_SEND: 如果app.testing設(shè)置為true啦扬,則發(fā)送被抑制中狂;
- MAIL_ASCII_ATTACHMENTS: 如果設(shè)置為true,則將附加的文件名轉(zhuǎn)換為ASCII扑毡。
使用Flask-Mail
這里我們通過(guò)網(wǎng)頁(yè)的形式來(lái)發(fā)送郵件胃榕。
在上面的Flask程序中,我們編寫(xiě)視圖函數(shù)瞄摊,如下所示:
@app.route('/write')
def write_mail():
return render_template('write.html')
這里我們首先創(chuàng)建一個(gè)write_mail視圖函數(shù)勋又,其作用是渲染write.html模板文件,write.html文件泉褐,代碼如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{{ url_for('send_mail') }}" method="post">
<p>收件人是:<input type="text" name="username"></p>
<p>郵箱主題為:<input type="text" name="theme"></p>
<p>郵箱內(nèi)容為:<input type="text" name="content"></p>
<p><input type="submit" value="發(fā)送"></p>
</form>
</body>
</html>
這里我們使用了url_for()方法調(diào)用視圖函數(shù)send_mail()赐写,當(dāng)點(diǎn)擊發(fā)送時(shí),就會(huì)調(diào)用send_mail()視圖函數(shù)膜赃,并把文本中輸入的數(shù)據(jù)傳遞到請(qǐng)求中挺邀。
send_mail視圖函數(shù)代碼如下所示:
@app.route('/send' ,methods=['GET','POST'])
def send_mail():
username=request.form.get('username') #獲取請(qǐng)求中的username參數(shù)
theme=request.form.get('theme') #獲取請(qǐng)求中的theme參數(shù)
content=request.form.get('content') #獲取請(qǐng)求中的content
msg = Message(theme, sender='1308454615@qq.com', recipients=[username],body=content) #使用Messgae方法
mail.send(msg) #使用Mail類(lèi)中的send()方法
return '郵件發(fā)送成功'
獲取請(qǐng)求中的參數(shù),在使用Message()實(shí)例封裝郵件跳座,其語(yǔ)法結(jié)構(gòu)為:
其中:第一個(gè)參數(shù)為郵件主題端铛,第二個(gè)sender參數(shù)為發(fā)件人,第三個(gè)recipients參數(shù)為收件人疲眷,其參數(shù)值為一個(gè)列表禾蚕,所以可以同時(shí)傳入多個(gè)收件人,第四個(gè)參數(shù)為郵件內(nèi)容狂丝。
最后使用Mail類(lèi)中的send()方法發(fā)送郵件换淆,
在Mail類(lèi)中有以下方法:
方法 | 描述 |
---|---|
send() | 發(fā)送Message類(lèi)對(duì)象的內(nèi)容 |
connect() | 與郵件主機(jī)打開(kāi)連接 |
send_message() | 發(fā)送消息對(duì)象 |
好了,代碼已經(jīng)寫(xiě)好了几颜,啟動(dòng)Flask程序倍试,訪(fǎng)問(wèn)http://127.0.0.1:5000/write,正確輸入內(nèi)容蛋哭,如下圖所示:
點(diǎn)擊發(fā)送后县习,就會(huì)跳轉(zhuǎn)到http://127.0.0.1:5000/send網(wǎng)頁(yè)中,如下圖所示:
好了,關(guān)于Flask框架——Flask-Mail郵件就學(xué)到這里躁愿,感謝觀看叛本,下篇文章我們繼續(xù)學(xué)習(xí)Flask框架——Flask-SQLite數(shù)據(jù)庫(kù)。
公眾號(hào):白巧克力LIN
該公眾號(hào)發(fā)布Python彤钟、數(shù)據(jù)庫(kù)来候、Linux、Flask样勃、自動(dòng)化測(cè)試吠勘、Git等相關(guān)文章性芬!