Flask框架——Flask-Mail郵件

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

Web應(yīng)用程序經(jīng)常需要向用戶、客戶端、管理員、運(yùn)維人員等相關(guān)人員發(fā)送郵件。在Flask框架中提供了Flask-Mail郵件庫來管理電子郵件的收發(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項目,其代碼如下所示:

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ù)器的端口號
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)建郵件類對象

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

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

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

服務(wù)器名稱 服務(wù)器地址 SSL協(xié)議端口號 非SSL協(xié)議端口號
IMAP imap.qq.com 993 143
SMTP smtp.qq.com 465/587 25
POP3 pop.qq.com 995 110

SSL連接客戶端授權(quán)碼可以按如下圖獲?。?/p>



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

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

發(fā)送短信就會獲取到客戶端授權(quán)碼了。

除了剛才我們在Flask程序中配置的參數(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

這里我們通過網(wǎng)頁的形式來發(fā)送郵件。

在上面的Flask程序中,我們編寫視圖函數(shù),如下所示:

@app.route('/write')
def write_mail():
    return render_template('write.html')

這里我們首先創(chuàng)建一個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)點擊發(fā)送時,就會調(diào)用send_mail()視圖函數(shù),并把文本中輸入的數(shù)據(jù)傳遞到請求中。

send_mail視圖函數(shù)代碼如下所示:

@app.route('/send' ,methods=['GET','POST'])
def send_mail():
    username=request.form.get('username')       #獲取請求中的username參數(shù)
    theme=request.form.get('theme')             #獲取請求中的theme參數(shù)
    content=request.form.get('content')         #獲取請求中的content
    msg = Message(theme, sender='1308454615@qq.com', recipients=[username],body=content)        #使用Messgae方法
    mail.send(msg)              #使用Mail類中的send()方法
    return '郵件發(fā)送成功'

獲取請求中的參數(shù),在使用Message()實例封裝郵件,其語法結(jié)構(gòu)為:

其中:第一個參數(shù)為郵件主題,第二個sender參數(shù)為發(fā)件人,第三個recipients參數(shù)為收件人,其參數(shù)值為一個列表,所以可以同時傳入多個收件人,第四個參數(shù)為郵件內(nèi)容。

最后使用Mail類中的send()方法發(fā)送郵件,

在Mail類中有以下方法:

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

好了,代碼已經(jīng)寫好了,啟動Flask程序,訪問http://127.0.0.1:5000/write,正確輸入內(nèi)容,如下圖所示:


點擊發(fā)送后,就會跳轉(zhuǎn)到http://127.0.0.1:5000/send網(wǎng)頁中,如下圖所示:

好了,關(guān)于Flask框架——Flask-Mail郵件就學(xué)到這里,感謝觀看,下篇文章我們繼續(xù)學(xué)習(xí)Flask框架——Flask-SQLite數(shù)據(jù)庫。

公眾號:白巧克力LIN

該公眾號發(fā)布Python、數(shù)據(jù)庫、Linux、Flask、自動化測試、Git等相關(guān)文章!

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

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

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