新手学习Python3.5,根据教程试一试使用Python3.5中的smtplib模块发送电子邮件。出现多个问题:
本文中使用的发送邮箱:[email protected] 接受邮箱:[email protected]
1、Error:无法发送邮件.Case:(550, b'User has no permission') 和 Error:无法发送邮件.Case:(535, b'Error: authentication failed')
教程代码:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = '[email protected]'
pwd = '******'
receivers = ['[email protected]']
# 三个参数:第一个为文本内容,第二个为plain设置文本格式,第三个为utf-8设置编码
message = MIMEText("Python 发送邮件测试...","plain",'utf-8')
message ['From'] = Header("邮件测试",'utf-8')
message ['To'] = Header("测试",'utf-8')
subject = "Python邮件测试"
message["Subject"] = Header(subject,"utf-8")
try:
# 使用非本地服务器,需要建立ssl连接
smtpObj = smtplib.SMTP_SSL("smtp.163.com",465)
smtpObj.login(sender,pwd)
smtpObj.sendmail(sender,receivers,message.as_string())
print("邮件发送成功")
except smtplib.SMTPException as e:
print("Error:无法发送邮件.Case:%s"%e)
运行结果:Error:无法发送邮件.Case:(550, b'User has no permission')
错误原因:我们使用python发送邮件时相当于自定义客户端根据用户名和密码登录,然后使用SMTP服务发送邮件,新注册的163邮箱是默认不开启客户端授权的,因此登录总是被拒绝。
解决办法:进入163邮箱-设置-客户端授权密码-开启(授权码是用于登录第三方邮件客户端的专用密码),与登录密码不同。开启后在程序中将
pwd = '******'
更改授权密码。如果不及时更改,将会出现出错 Error:无法发送邮件.Case:(535, b'Error: authentication failed') 及时更改授权密码即可。
2、Error:无法发送邮件.Case:(554, b'DT:SPM 163 smtp11,D8CowABnhR7VKLZan2wPLg--.27792S2 1521887445,please see http://mail.163.com/help/help_spam_16.htm?ip=220.180.56.61&hostid=smtp11&time=1521887445')
解决办法:这个错误我解决了很久,有网友说是因为邮件主题有“测试”二字被屏蔽了之类的,正确的应该是将
红色方框代码换成:
其中:A和B可以在邮箱中找到,你可以先手动用163邮箱发一封邮件给QQ邮箱查看:
将邮件中的A和B替换到代码中即可。
注意:A、B和"<"之间有一个空格!!!
祝:学习顺利~