Python3 发送邮件踩坑记录

     新手学习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')  及时更改授权密码即可。

Python3 发送邮件踩坑记录_第1张图片


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')

解决办法:这个错误我解决了很久,有网友说是因为邮件主题有“测试”二字被屏蔽了之类的,正确的应该是将

Python3 发送邮件踩坑记录_第2张图片

红色方框代码换成:

Python3 发送邮件踩坑记录_第3张图片

其中:A和B可以在邮箱中找到,你可以先手动用163邮箱发一封邮件给QQ邮箱查看:

Python3 发送邮件踩坑记录_第4张图片

将邮件中的A和B替换到代码中即可。

注意:A、B和"<"之间有一个空格!!!


祝:学习顺利~








你可能感兴趣的:(Python)