python3.6郵件收發總結(搭建環境篇)
python可以通過SMTP伺服器實現郵件收發
SMTP通訊的基本流程可以概括為以下幾點:
1.連線SMTP伺服器
2.登陸使用者名稱和密碼
3.傳送指定郵件內容
4.退出SMTP連線
在我實現收發功能後,踩啦很多雷。希望吧過程總結一下,希望可以幫助需要學習的朋友少走點彎路。建議:
如果使用第三方郵件服務不要頻繁的傳送郵件 這是對服務商的尊重,不要增加伺服器的負擔。 還有如果你這麼做,可能會被管理員盯上。
第一步 安裝函式庫。我的環境python 3.6.2 pytharm (32位)需要的庫有smtplib、email,smtplib模組主要負責傳送郵件:是一個傳送郵件的動作,連線郵箱伺服器,登入郵箱,傳送郵件(有發件人,收信人,郵件內容);email模組主要負責構造郵件:指的是郵箱頁面顯示的一些構造,如發件人,收件人,主題,正文,附件等。用pytharm可以搜尋到smtplib
如圖:我的做法簡單粗暴,全部裝啦。可以執行。
email模組就不行了 python3.6中mail不是內建模組,所以需要手動安裝,pycharm無法安裝。解決方法:百度進入pypi搜尋:下載
https://pypi.python.org/packages/bb/35/0aa85e06fc14fe86d4064f18ad05254ebc649e81235faf96d591b02158e9/email-6.0.0a1.tar.gz
進入你的python3.6目錄在cmd視窗執行 python setup.py install
參考 https://blog.csdn.net/py_tester/article/details/78650930
解壓後的檔案
我的習慣是編一個bat檔案執行新建一個文字文件輸入:
python setup.py install,另存為run.bat點選檔案執行(字尾名bat即可)。
編譯python使用bat檔案編譯除錯下載是很方便的(Windows系統)這個以後總結
安裝完畢,執行不會報錯。
我在這個過程做了一件很蠢的事,就是把我的程式命名為email.py(絕對頭暈),導致整個目錄下檔案呼叫email失敗。顯然命名衝突。
提示: No module named ‘email.mime’; ‘email’ is not a package
把檔案重新命名才能解決。
第二步 開通你的POP/IMAP服務。
需要一個繫結手機的郵箱,因為現在需要手機簡訊驗證授權碼。
授權碼是用於登入第三方郵件客戶端的專用密碼。
POP/IMAP服務是運營商開放的伺服器介面。連線SMTP伺服器是運營商伺服器名字。
163網易郵箱:smtp.163.com
公司內部郵箱:mail.xxxxx.com
qq郵箱:smtp.qq.com
注意:163、公司內部郵箱用25和465埠均可以傳送郵件(SMTP對應25,可以省略;SMTP_SSL對應465不可以省略),而qq只能用smtplib.SMTP_SSL(host, 465)傳送!
參考:https://blog.csdn.net/py_tester/article/details/78650930
登陸使用者名稱和密碼:使用者名稱是你的郵箱名,密碼是你獲得的授權碼
網易郵箱獲取授權碼的方式
其他網站實現很類似。更多設定參考
POP3設定
簡單的傳送 ,
import smtplib
from email.mime.text import MIMEText
mailserver = "smtp.163.com" #郵箱伺服器地址
username_send = '[email protected]' #郵箱使用者名稱
password = 'XXXX' #郵箱密碼:需要使用授權碼
username_recv = '[email protected]' #收件人,多個收件人用逗號隔開
mail = MIMEText('這是發用的郵件內容')
mail['Subject'] = '這是郵件主題'
mail['From'] = username_send #發件人,注意這裡,一定和smtp.sendmail引數一致,否則會報錯
mail['To'] = username_recv #收件人;[]裡的三個是固定寫法
smtp = smtplib.SMTP(mailserver,port=25) # 連線郵箱伺服器,smtp的埠號是25
# smtp=smtplib.SMTP_SSL('smtp.qq.com',port=465) #QQ郵箱的伺服器和埠號
smtp.login(username_send,password) #登入郵箱
smtp.sendmail(username_send,username_recv,mail.as_string())# 引數分別是傳送者,接收者,第三個是把上面的傳送郵件的內容變成字串
smtp.quit() # 傳送完畢後退出smtp
下一篇詳細介紹傳送接受細節部分