Flask-Mail使用163郵箱非同步傳送郵件
阿新 • • 發佈:2019-01-01
很多型別的應用程式都需要在特定事件發生時提醒使用者,而常用的通訊方法是電子郵件。
雖然 Python 標準庫中的 smtplib 包可用在 Flask 程式中傳送電子郵件,但包裝了 smtplib 的
163郵箱配置 app.config['MAIL_SERVER'] = 'smtp.163.com'app.config['MAIL_PORT'] = 25app.config['MAIL_USE_TLS'] = Trueapp.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')app.config['MAIL_PASSWORD'] =os.environ.get('MAIL_PASSWORD')app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'app.config['FLASKY_MAIL_SENDER' ] = 'Flasky Admin <[email protected]>'
(venv) $ set MAIL_PASSWORD=<Gmail password> 授權碼
def send_async_email(app, msg): with app.app_context(): mail.send(msg)
def send_email(to, subject, template, **kwargs): msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + subject, sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to]) msg.body = render_template(template + '.txt', **kwargs) msg.html = render_template(template + '.html', **kwargs) thr = Thread(target=send_async_email, args=[app, msg]) thr.start() return thr
雖然 Python 標準庫中的 smtplib 包可用在 Flask 程式中傳送電子郵件,但包裝了 smtplib 的
Flask-Mail 擴充套件能更好地和 Flask 整合。
使用 pip 安裝 Flask-Mail:
(venv) $ pip install flask-mail
Flask-Mail 配置項
Flask-Mail 使用標準的 Flask 配置 API 進行配置,下面是一些常用的配置項:
配置項 | 說明 |
---|---|
MAIL_SERVER | 郵件伺服器地址,預設為 localhost |
MAIL_PORT | 郵件伺服器埠,預設為 25 |
MAIL_USE_TLS | 是否啟用傳輸層安全 (Transport Layer Security, TLS)協議,預設為 False |
MAIL_USE_SSL | 是否啟用安全套接層 (Secure Sockets Layer, SSL)協議,預設為 False |
MAIL_DEBUG | 是否開啟 DEBUG,預設為 app.debug |
MAIL_USERNAME | 郵件伺服器使用者名稱,預設為 None |
MAIL_PASSWORD | 郵件伺服器密碼,預設為 None |
MAIL_DEFAULT_SENDER | 郵件發件人,預設為 None,也可在 Message 物件裡指定 |
MAIL_MAX_EMAILS | 郵件批量傳送個數上限,預設為 None |
MAIL_SUPPRESS_SEND | 預設為 app.testing,如果為 True,則不會真的傳送郵件,供測試用 |
微軟 Windows 使用者可按照下面的方式設定環境變數:(<>改為'')
(venv) $ set MAIL_USERNAME=<Gmail username> 郵箱(venv) $ set MAIL_PASSWORD=<Gmail password> 授權碼
在cmd下面,設定環境變數的時候,不需要引號,在powershell下面設定的時候,需要引號!!!
非同步傳送郵件程式碼:
mail = Mail(app)def send_async_email(app, msg): with app.app_context(): mail.send(msg)
def send_email(to, subject, template, **kwargs): msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + subject, sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to]) msg.body = render_template(template + '.txt', **kwargs) msg.html = render_template(template + '.html', **kwargs) thr = Thread(target=send_async_email, args=[app, msg]) thr.start() return thr