首先使用网上的方法(这里使用163邮箱,smtp.163.com是smtp服务器地址,25为端口号):html
import smtplib server = smtplib.SMTP('smtp.163.com', 25) server.login('j_hao104@163.com', 'password')
Traceback (most recent call last): File "C:/python/t.py", line 192, in <module> server.login('j_hao104@163.com', 'password') File "C:\Python27\lib\smtplib.py", line 622, in login raise SMTPAuthenticationError(code, resp) smtplib.SMTPAuthenticationError: (535, 'Error: authentication failed')
发现返回: smtplib.SMTPAuthenticationError: (535, 'Error: authentication failed'),提示验证失败。python
网上给了不少解决办法有不少:
segmentfault
http://markmail.org/message/3ub3itxq4aqwaikx 服务器
https://segmentfault.com/q/1010000003802498 测试
有说python不支持SMTP服务,或是服务没开启之类的。可是我想起上次我用foxmail登陆个人163邮箱的时候,邮箱密码都输对了仍是提示我密码错误,最后的解决办法是:像QQ和163邮箱如今都有个客户端密码,用第三方登陆时需用客户端密码登陆才行,python也是如此,所以去设置好客户端密码,再用客户端密码登陆。编码
import smtplib server = smtplib.SMTP('smtp.163.com', 25) server.login('j_hao104@163.com', 'clientPassword')
此时便返回登陆成功提示:spa
(235, 'Authentication successful')
首先使用网上给出的代码:.net
import smtplib from email.mime.text import MIMEText server = smtplib.SMTP('smtp.163.com', 25) server.login('j_hao104@163.com', 'clientPassword') msg = MIMEText('hello, send by Python...', 'plain', 'utf-8') server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string())
构造MIMEText对象时,第一个参数是邮件正文,第二个参数是MIME的subtype,最后个是编码方式。code
sendmail是发邮件方法,第一个参数是发件邮箱,第二个参数是收件人邮箱,是一个列表,表明能够同时发给多我的,as_string是把MIMEText对象变成str。orm
可是执行结果并不能获得网上说的结果:
而是:
Traceback (most recent call last): File "C:/python/t.py", line 195, in <module> server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string()) File "C:\Python27\lib\smtplib.py", line 746, in sendmail raise SMTPDataError(code, resp) smtplib.SMTPDataError: (554, 'DT:SPM 163 smtp11,D8CowEDpDkE427JW_wQIAA--.4996S2 1454562105,please see http://mail.163.com/help/help_spam_16.htm?ip=171.221.144.51&hostid=smtp11&time=1454562105')
网上一查才知道:smtplib.SMTPDataError: (554, 'DT:SPM 163 smtp11……的错误是由于信封发件人和信头发件人不匹配。能够看出看出图片中并无发件人和主题,因此须要对代码作以下修改:
import smtplib from email.header import Header from email.mime.text import MIMEText server = smtplib.SMTP('smtp.163.com', 25) server.login('j_hao104@163.com', 'clientPassword') msg = MIMEText('hello, send by Python...', 'plain', 'utf-8') msg['From'] = 'j_hao104@163.com <j_hao104@163.com>' msg['Subject'] = Header(u'text', 'utf8').encode() msg['To'] = u'飞轮海 <jinghao5849312@qq.com>' server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string())
这样就能成功发出邮件啦
msg里的具体信息能够用通常发邮件方式发封邮件测试下
http://jingyan.baidu.com/article/b24f6c822784b886bfe5dabe.html