網上關於Python發送郵件的文章很多,但是多數的撰寫時間應該是早於Python 2.7.3的,所以都不能直接改帳號和密碼直接登陸主流郵箱的smtp郵件服務器發送郵件。坑趟了不少,許多的版本甚至沒有login登錄的調用,有些使用了fakesocketXXX的貌似廢棄類型,2.7.3已經不支持了,總之就是沒有一篇博文可以不拋異常的把郵件順利的發出去。
html
異常信息過程當中搜了很多,503的返回碼,10060的錯誤代碼,不一而足,最顯著的提示信息是提示須要need secure connection,提到了例如ssl。還好博主以前有過了解ssl和tls這類概念,數據交互雖然沒有搞過,可是Python必定是貼心的封裝無缺的,對咱們開發者應該就是一句調用的問題,具體的過程原理交給網絡安全專家們處理吧。python
總之週六試圖看文檔,惋惜F着Q也打不開文檔頁,只能放放問題了,周天的話,好在文檔順利打開(http://docs.python.org/2/library/smtplib.html#smtplib.SMTP.sendmail)。直接搜ssl,看到了SMTP_SSL這個類型,而後,一切搞定,不費吹灰之力,很有殺雞用牛刀的感受。安全
#-*- encoding: gb2312 -*- import os, sys import smtplib from smtplib import SMTP_SSL from email.header import Header from email.mime.text import MIMEText mailInfo = { "from":"發信人用戶名@qq.com", "to":"收信人用戶名@qq.com", "hostname":"smtp.qq.com", "username":"帳戶名", "password":"密碼", "mailsubject":"郵件標題", "mailtext":"郵件正文", "mailencoding":"utf-8" } if __name__ == '__main__': smtp = SMTP_SSL(mailInfo["hostname"]) smtp.set_debuglevel(1) smtp.ehlo(mailInfo["hostname"]) smtp.login(mailInfo["username"],mailInfo["password"]) msg = MIMEText(mailInfo["mailtext"],"text",mailInfo["mailencoding"]) msg["Subject"] = Header(mailInfo["mailsubject"],mailInfo["mailencoding"]) msg["from"] = mailInfo["from"] msg["to"] = mailInfo["to"] smtp.sendmail(mailInfo["from"], mailInfo["to"], msg.as_string()) smtp.quit()
郵件卻是順利收到了,郵件正文貌似不正常,有興趣的哥們給看看吧。
服務器