此篇完整 source code 放在 Github Repo - flask-mail-mini-setup 供參考!
過去曾經使用 flask-mail 這個模組,但它很久沒維護了,想說找其他的試試來重新設定寄信,發現有 flask-mailman 可以使用,嘗試改用它發信,同時也熟悉一下 sengrid 的設定,接下來會大概紀錄三種設定:
-
- 使用
flask_mailman
module 以 gmail 為 mail server 寄信
- 使用
-
- 使用
flask_mailman
module 以 sendgrid 為 mail server 寄信
- 使用
-
- 單純使用
sendgrid
module 提供的 Web API 完成寄信
- 單純使用
一. < 使用 flask_mailman
module 以 gmail 為 mail server 寄信 >
Pre-request:
- 使用 module & version
- flask
- flask-mailman
- python-dotenv
flask==2.0.3
flask-mailman==0.3.0
python-dotenv==0.19.2
- 需有一個 Email Account,如果是 Google Account 要去關閉 低安全性應用程式存取權
Step.1 建環境
|
|
Step.2 然後在 gmail_mailman.py
寫 code 建立 Flask App,簡單啟動一個 flask server
|
|
Step.3 從第二步延伸: 在 flask_mail_demo/
底下
|
|
Step.4 .env
file 內容為 gmail password:
GMAIL_PASSWORD=<換成自己的 gmail 密碼>
Step.5 config.py
file 內容為:
|
|
- 把 env load 進來
- 設計
GmailConfig()
class - config variable 可以切換多個 config class,後面會用到。
MAIL_SERVER='smtp.gmail.com' gmail server
MAIL_PORT=465 使用 port 465
MAIL_USE_SSL=True SSL 要為 True
MAIL_USERNAME=<mail 帳號>
MAIL_PASSWORD=<mail 密碼>
MAIL_DEFAULT_SENDER=<Default 寄信人 mail 帳號>
Refer to:
Step.6 回到 gmail_mailman.py
修改裡面的內容:
|
|
- 把 flask_mailman 的 source code import 進來使用
- 修改 config 的參數,改成自己的 mail,import 進來,並給 app 使用
- 把 app 帶入 Mail instance
- 設定好
send_email
function,一樣把to
改成收得到信的 mail,並放到@app.route('/')
底下 - 記得先進 Virtual Environment
- 執行
python gmail_mailman.py
,並訪問http://127.0.0.1:5000/
- 確定路徑沒錯,沒有錯誤訊息的話,去信箱就會看到信了!
二. < 使用 flask_mailman
module 以 sendgrid 為 mail server 寄信 >
跟 1. 相似,只是 mail 參數設定不同,以及需要去 sendgrid 官網註冊一個帳號,拿取 Secret Key(Token)
也就是 MAIL_PASSWORD 要帶入的地方
Pre-request:
- 使用 module & version
- flask
- flask-mailman
- python-dotenv
flask==2.0.3
flask-mailman==0.3.0
python-dotenv==0.19.2
-
需有一個 Email Account,如果是 Google Account 要去關閉 低安全性應用程式存取權
-
需要去 sendgrid - sign up 註冊一個帳號
Step.1 在 sendgrid 註冊完帳號後,在裡面操作拿取 Secret Key
(API Key)
Go to Settings
-> API Keys
:然後申請一個,拿到後保存下來。
Step.2 拿完 Secret Key
還必須要註冊一個 Single Sender Verification
Go to Settings
-> Sender Authentication
:然後申請一個,拿到後保存下來。
Step.3 在剛剛的 flask_mail_demo/
底下修改 .env
config.py
.env
|
|
config.py
|
|
MAIL_SERVER='smtp.sendgrid.net'
MAIL_PORT=587 port 587
MAIL_USE_TLS=True TLS 為 True
MAIL_USERNAME='apikey' MAIL_USERNAME 一定要放上 apikey
MAIL_DEFAULT_SENDER=<mail 帳號>
MAIL_PASSWORD=os.getenv('MAIL_PASSWORD')
Step.4 一樣在 flask_mail_demo/
底下建立 flask app
|
|
- 裡面的內容跟 Gmail 是一樣的,把 config 調整成 sendgrid 的就行:
|
|
- 一樣該改成自己 mail 的都要改,記得進 Virtual Environment。
- 執行
python sendgrid_mailman.py
,並訪問http://127.0.0.1:5000/
- 路徑沒錯,沒報錯的話就會看到信,成功!
三. < 單純使用 sendgrid
module 提供的 Web API 完成寄信 >
Pre-request:
- 使用 module & version
- flask
- sendgrid
- python-dotenv
flask==2.0.3
sendgrid==6.9.7
python-dotenv==0.19.2
- 需有一個 Email Account,如果是 Google Account 要去關閉 低安全性應用程式存取權
Step.1 與前一個拿 sendgrid 的 Secret Key 一樣
- 這裡就使用跟上面一樣的
Secret Key
,就用SendgridConfig()
class
Step.2 一樣在 flask_mail_demo/
底下建立 flask app
其實可以不用建立 flask app,這是個單純的寄信 API,但這裡還是 demo 啟動 Flask App 來寄出信。
|
|
內容:
|
|
- 一樣該改成自己 mail 的都要改,記得進 Virtual Environment。
- 執行
python sendgrid_webapi.py
,並訪問http://127.0.0.1:5000/
- 路徑沒錯,沒報錯的話就會看到信,成功!