用Python發郵件

更新:評論區淪陷了,我現在終於知道為什麼知乎可以關閉評論,篩選特定評論了。。。

我只說一句,原文的意思,說Python大發好,只是說Python方便好用,並沒有和其他編程語言作對比,更沒有說孰優孰劣的意思~


Python真是萬能語言啊,還能發郵件。。。我也是最近剛知道!那麼問題來了,用Python發郵件有什麼用啊?

1.可以和爬蟲代碼結合一下、譬如查12306、查攜程機票時可以設置查詢到自動發郵件提醒

2.程序猿們可以利用Python發郵件監控程序的運行,譬如有bug報錯了,趕緊發個郵件提醒你,回來公司加班!

3.搜集網上行業信息的,搜集到一堆郵箱,可以群發啊,做廣告啊~(當然這樣不太好)

4.譬如我可以寫一個暖心的小程序,讓Python自動在惡劣天氣,提醒親朋好友注意加衣服,在生日時發送生日祝福。。。。。。

果然Python大法好啊~


本次,我們發郵件用到的Python庫是smtplib和email。簡單來說,smtplib庫主要是用於負責和郵件伺服器進行通訊,email庫則主要用於規定編寫郵件的頭、主體、內容、附件等。

發郵件之前我們需要用Python登錄smtp伺服器,這樣才能有發送許可權,所以,我們需要去郵箱手動開啟smtp服務,然後記住伺服器授權碼(授權碼意思是,你可以不用我的網頁郵箱或者郵箱app登錄,你可以用郵箱賬號+授權碼在後台來獲取郵箱伺服器的內容)

由於本次我們用QQ郵箱發送,你也可以用網易郵箱或者其他郵箱發送,原理都是類似~

如何開啟QQ郵箱smtp伺服器和獲取授權碼:??


轉載自:jingyan.baidu.com/artic

很多場合都會用到郵箱授權碼進行郵件的收取,現在講一下如何QQ郵箱的授權碼獲取方式,網易郵箱的也差不多哦~

工具/原料

  • 電腦版的QQ郵箱

方法/步驟

登錄電腦版QQ郵箱,選擇最上方的「設置」。

如圖選擇「賬戶」,切換到賬戶詳情頁面。

在賬戶頁面往下拉,可以看到pop3設置,選擇「開啟」。

按照彈出的窗口提示操作進行密保驗證。有多種方式可以驗證,比如手機令牌等。推薦使用簡訊驗證。

按照簡訊驗證的提示發送簡訊。發送成功後直接點擊「我已發送」。

彈出的提示中直接顯示16位的授權碼,可以複製下來,或者是記下來,千萬不要記錯了。然後點擊「確定」。

下方的收取選項一般是默認30天的,點擊下拉箭頭,選擇「全部」,並點擊頁面最下方的保存更改。千萬別忘了點擊保存,不然之前做的都白費了!

最後就是到需要授權碼的那些地方輸入剛獲得的16位授權碼就可以了。

END

注意事項

  • 操作完別忘了保存。
  • 授權碼不要記錯了。
  • 收取選項改為「全部」,不然無法導入所有的郵件。

獲取好伺服器授權碼後,我們就可以寫代碼了,本次發送一個簡單的文字郵件,然後添加一張可愛豬的圖片作為附件:

程序運行過程:

https://www.zhihu.com/video/938892489025970176

程序運行結果:

代碼如下:

import smtplibfrom email import encodersfrom email.mime.text import MIMETextfrom email.mime.base import MIMEBasefrom email.mime.multipart import MIMEMultipart#sender是郵件發送人郵箱,passWord是伺服器授權碼,mail_host是伺服器地址(這裡是QQsmtp伺服器)sender = xxxxxxx@qq.com#passWord = xxxmail_host = smtp.qq.com#receivers是郵件接收人,用列表保存,可以添加多個receivers = [aaa@qq.com,bbb@163.com]#設置email信息msg = MIMEMultipart()#郵件主題msg[Subject] = input(f"{請輸入郵件主題:}")#發送方信息msg[From] = sender#郵件正文是MIMEText:msg_content = input(f"{請輸入郵件主內容:}")msg.attach(MIMEText(msg_content, plain, utf-8))# 添加附件就是加上一個MIMEBase,從本地讀取一個圖片:with open(/Users/xxx/1.jpg, rb) as f: # 設置附件的MIME和文件名,這裡是jpg類型,可以換png或其他類型: mime = MIMEBase(image, jpg, filename=Lyon.png) # 加上必要的頭信息: mime.add_header(Content-Disposition, attachment, filename=Lyon.png) mime.add_header(Content-ID, <0>) mime.add_header(X-Attachment-Id, 0) # 把附件的內容讀進來: mime.set_payload(f.read()) # 用Base64編碼: encoders.encode_base64(mime) # 添加到MIMEMultipart: msg.attach(mime)#登錄並發送郵件try: #QQsmtp伺服器的埠號為465或587 s = smtplib.SMTP_SSL("smtp.qq.com", 465) s.set_debuglevel(1) s.login(sender,passWord) #給receivers列表中的聯繫人逐個發送郵件 for i in range(len(receivers)): to = receivers[i] msg[To] = to s.sendmail(sender,to,msg.as_string()) print(Success!) s.quit() print ("All emails have been sent over!")except smtplib.SMTPException as e: print ("Falied,%s",e)

推薦閱讀:

你是如何深入理解 Python 的 list comprehension 就是 generator 這一點的?
Python 中為何沒有數字到字元串的自動轉換?
為什麼那麼多人喜歡用urllib和正則,而不用更加方便的requests和BeautifulSoup?
想問怎麼用Python編一個 同時投12個骰子 計算每次投出至少出現兩個六的次數及概率的程序?

TAG:Python | Python入门 | Python编程 |