在學習flask-mail來發送電子郵件的時候遇到了一些問題,其實都是些小問題,如今記錄下來以便於之後查看。 html
pip install flask-mail
from flask.ext.mail import Mail mail = Mail(app)
MAIL_SERVER = 'smtp.live.com', MAIL_PROT = 25, MAIL_USE_TLS = True, MAIL_USE_SSL = False, MAIL_USERNAME = "", MAIL_PASSWORD = "", MAIL_DEBUG = True
MAIL_SERVER = 'smtp.qq.com', MAIL_PROT = 25, MAIL_USE_TLS = True, MAIL_USE_SSL = False, MAIL_USERNAME = "", MAIL_PASSWORD = "", MAIL_DEBUG = True
MAIL_SERVER = 'smtp.126.com', MAIL_PROT = 25, MAIL_USE_TLS = True, MAIL_USE_SSL = False, MAIL_USERNAME = "", MAIL_PASSWORD = "", MAIL_DEBUG = True
import os # ... app.config['MAIL_SERVER'] = 'smtp.163.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USE_SSL'] = True app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME') app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
注意,這裏的端口改成了465,是網易郵箱的配置,在郵箱幫助中能夠搜索到python
同時設置MAIL_USE_SSL爲True,無需設置MAIL_USE_TSL,默認爲Falseshell
其實服務器的配置都是挺簡單的,各個不一樣郵箱服務器的SMTP配置的不一樣點就是MAIL_SERVER那裏,再就是不一樣的協議用端口不一樣,根據本身的配置來設置,若是明明配置正確了都還不能夠成功發送郵件,那就得檢查一下本身的郵箱帳戶裏邊兒有沒有把SMTP服務給打開,具體的打開方式就本身百度了哈,都挺簡單的事情。flask
from flask import Flask from flask.ext.mail import Mail, Message import os app = Flask(__name__) app.config.update( DEBUG = True, MAIL_SERVER='smtp.live.com', MAIL_PROT=25, MAIL_USE_TLS = True, MAIL_USE_SSL = False, MAIL_USERNAME = 'example@hotmail.com', MAIL_PASSWORD = '**********', MAIL_DEBUG = True ) mail = Mail(app) @app.route('/') def index(): # sender 發送方哈,recipients 郵件接收方列表 msg = Message("Hi!This is a test ",sender='example@example.com', recipients=['example@example.com']) # msg.body 郵件正文 msg.body = "This is a first email" # msg.attach 郵件附件添加 # msg.attach("文件名", "類型", 讀取文件) with app.open_resource("F:\2281393651481.jpg") as fp: msg.attach("image.jpg", "image/jpg", fp.read()) mail.send(msg) print "Mail sent" return "Sent" if __name__ == "__main__": app.run()
咱們先來看文章主要內容:windows
這裏講一下SMTP和POP還有IMAP功能bash
這個主要達到的功能就是:能夠經過非官方的客戶端,來訪問郵箱收發郵件服務器
好比:我用郵箱大師這個軟件,能夠綁定某個126郵箱,來進行收發郵件app
而POP和IMAP的區別在於,POP的操做,不會同步到服務器上,也就是不會影響到服務器post
而IMAP是和服務器同步的學習
而後126設置相關的頁面以下:
特別要注意我附加在頁面上的文字,網易會在開通這些功能的時候讓你另外設置一個受權碼!!這個受權碼是當你在使用非網易客戶端時,啓用pop/smtp/imap幾個功能時候的密碼!!
也就是說,你用其餘軟件收發郵件的時候,密碼不是你原來那個,而是你的受權碼!!!
也能夠在郵箱中把客戶端受權密碼關閉,直接使用密碼發送便可
在開發過程當中,若是鏈接到外部SMTP 服務器,則可能更方便。舉個例子,示例6-1 展現
瞭如何配置程序,以便使用Google Gmail 帳戶發送電子郵件。
示例6-1 hello.py:配置Flask-Mail 使用Gmail
import os
# ...
app.config['MAIL_SERVER'] = 'smtp.126.com' #這裏是設置每一個郵箱不一樣的smtp服務器,因爲GMAIL在國內被牆了,因此我這裏使用126
app.config['MAIL_PORT'] = 25 #本身百度一下,每一個郵箱對應的smtp端口號
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME') #這裏提示,不要將帳戶和密碼寫入代碼裏面,而是設置在環境變量裏面讀取
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
前方大坑.....注意避讓
保存電子郵件服務器用戶名和密碼的兩個環境變量要在環境中定義。若是你在Linux 或
Mac OS X 中使用bash,那麼能夠按照下面的方式設定這兩個變量:
(venv) $ export MAIL_USERNAME=<Gmail username>
(venv) $ export MAIL_PASSWORD=<Gmail password>
微軟Windows 用戶可按照下面的方式設定環境變量:
(venv) $ set MAIL_USERNAME=<Gmail username>
(venv) $ set MAIL_PASSWORD=<Gmail password>
我是windows用戶,因此選取第二個選項
這裏的1號大坑:設置的時候,要把<>去掉,而且!!你的郵箱名和密碼,都要用引號括起來,也就是字符串!!!
後續更新!!!重要更新!!!
在cmd下面,設置環境變量的時候,不須要引號,在powershell下面設置的時候,須要引號!!!
這裏的2號大坑:set這個設置環境變量的方法,是在cmd裏面的!!我用的是powershell!!他的語句應該是
$env:MAIL_USERNAME='xxxxx@126.com'
$env:MAIL_PASSWORD='這裏輸密碼'
補一下基礎知識!
由於在cmd裏面,查看全部環境變量的命令是set
而在powershell裏面,查看環境變量的命令是ls env: 而設置的方法是 $env: name='variable' 這裏的name是添加的變量名字,後面的variable則是變量內容
這裏轉載一篇其餘前輩的博客,予以參考!! http://blog.sina.com.cn/s/blog_bfc35a260102vv88.html
若是你按照cmd裏面的設置環境變量的方法set,那麼,你就會碰到受權錯誤553或者550的信息,以下
發送郵件的代碼以下:
(venv) $ python hello.py shell
>>> from flask.ext.mail import Message
>>> from hello import mail
>>> msg = Message('test subject', sender='you@example.com',
... recipients=['you@example.com'])
>>> msg.body = 'text body'
>>> msg.html = '<b>HTML</b> body'
>>> with app.app_context():
... mail.send(msg)
... #進行到這裏沒有報錯的話,那就是ok了!!
咱們來看一下測試結果
而後咱們最後補一下關於cmd下還有powershell下面的環境變量區別
在powershell下面,你須要用ls env:的命令,才能顯示參數
而設置方法,則是$env :
在windows下,在PyCharm的Terminal中設置環境變量,不行!!後來,在cmd命令下設置,關閉當前窗口後,就會失效,最關鍵的問題是在pycharm中沒法獲取,因此解決方法有兩種
第一種:在個人電腦-右鍵-屬性-高級系統設置-環境變量,將MAIL_USERNAME等設置
第二種:直接在pycharm中設置,設置後重啓pycharm
參考
https://blog.csdn.net/u013753393/article/details/53401717
https://blog.csdn.net/werewolf_st/article/details/46805429
https://www.oschina.net/translate/the-flask-mega-tutorial-part-xi-email-support?lang=chs&page=1#