网上关于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()
邮件却是顺利收到了,邮件正文貌似不正常,有兴趣的哥们给看看吧。
服务器