用smtplib登录qq邮箱发邮件

网上关于Python发送邮件的文章不少,可是多数的撰写时间应该是早于Python 2.7.3的,因此都不能直接改账号和密码直接登录主流邮箱的smtp邮件服务器发送邮件。坑趟了很多,许多的版本甚至没有login登陆的调用,有些使用了fakesocketXXX的貌似废弃类型,2.7.3已经不支持了,总之就是没有一篇博文能够不抛异常的把邮件顺利的发出去。

异常信息过程中搜了不少,503的返回码,10060的错误代码,不一而足,最显著的提示信息是提示需要need secure connection,提到了例如ssl。还好博主之前有过了解ssl和tls这类概念,数据交互虽然没有搞过,但是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()

邮件倒是顺利收到了,邮件正文貌似不正常,有兴趣的哥们给看看吧。

你可能感兴趣的:(用smtplib登录qq邮箱发邮件)