Flask框架——Flask-Mail郵件

上篇文章我們學(xué)習(xí)了Flask框架——Flask-WTF表單:文件上傳、驗(yàn)證碼,這篇文章我們學(xué)習(xí)Flask框架——Flask-Mail郵件。

Web應(yīng)用程序經(jīng)常需要向用戶、客戶端、管理員、運(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ù)器的名稱/IP地址
app.config['MAIL_PORT'] = 465                  #所用服務(wù)器的端口號(hào)
app.config['MAIL_USERNAME'] = 'yourmail@qq.com'     #發(fā)件人的用戶名
app.config['MAIL_PASSWORD'] = '*******'         #發(fā)件人的POP3/IMAP/SMTP服務(wù)的SSL連接客戶端授權(quán)碼
app.config['MAIL_USE_TLS'] = False              #禁用傳輸安全層加密
app.config['MAIL_USE_SSL'] = True               #啟用安全套接字層加密
mail = Mail(app)                                #創(chuàng)建郵件類對(duì)象

if __name__ == '__main__':
     app.run(debug = True)

這里我們是使用QQ郵箱作為發(fā)件郵箱。

QQ郵箱相關(guān)服務(wù)器信息:

服務(wù)器名稱 服務(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連接客戶端授權(quán)碼可以按如下圖獲取:



下拉,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)

開(kāi)啟POP3、IMAP/SMTP服務(wù),發(fā)送短信,

發(fā)送短信就會(huì)獲取到客戶端授權(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程序中,我們編寫視圖函數(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類中的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類中的send()方法發(fā)送郵件,

在Mail類中有以下方法:

方法 描述
send() 發(fā)送Message類對(duì)象的內(nèi)容
connect() 與郵件主機(jī)打開(kāi)連接
send_message() 發(fā)送消息對(duì)象

好了,代碼已經(jīng)寫好了,啟動(dòng)Flask程序,訪問(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)文章!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 首先我們現(xiàn)在qq里面開(kāi)通發(fā)送郵件服務(wù)先 首先點(diǎn)開(kāi)qq郵箱設(shè)置這里 然后點(diǎn)擊賬戶這里,一直往下拉,找到開(kāi)通 發(fā)送郵箱...
    阿猹在路上閱讀 348評(píng)論 0 0
  • Flask-Mail是一個(gè)對(duì)python smtplib進(jìn)行封裝以便集成到Flask提供發(fā)送郵件支持的模塊。在學(xué)習(xí)...
    摸不去的塵閱讀 1,419評(píng)論 0 0
  • [TOC] [Flask] Flask-Mail Welcome to Flask-Mail, you can u...
    ttdevs閱讀 1,592評(píng)論 0 4
  • 這一章真的好多坑,分成幾塊來(lái)寫1.以測(cè)試Flask_mail為目的2.狗書(shū)代碼實(shí)戰(zhàn)用目錄來(lái)看本片文章更好,mark...
    Hans941閱讀 1,522評(píng)論 1 3
  • 【百度云搜索,搜各種資料:http://bdy.lqkweb.com】 【搜網(wǎng)盤,搜各種資料:http://www...
    攻城獅筆記閱讀 635評(píng)論 0 5

友情鏈接更多精彩內(nèi)容