准备工作:
要想使用python发送邮件,需要借助第三方库 pyemail,需要在计算机中安装这个库,安装第三方库的方法,参考下面链接:
https://blog.csdn.net/liangmengbk/article/details/106731269
需要准备好163邮箱(发件人)的授权密码,操作步骤如下:
进入这个页面后,会看到下面的信息
因为我的邮箱已经开通了授权密码,如果没有开通的话根据页面提示开通即可,开通的目的是为了获取到授权密码。
这里的授权密码并非邮箱的登录密码,授权密码是开通授权密码功能后系统生成的一个字符串。
准备工作完成后,就可以写代码发送电子邮件了,下面以163邮箱为例,发送一封邮件到qq邮箱。
邮件发送
编写python代码
import smtplib
from email.mime.text import MIMEText
msg_from="[email protected]" #发送方地址
pwd="ABCDEF" #授权密码
to="[email protected],[email protected]" #接收方地址
subject="python" #邮件主题
content="hello i am python" #邮件内容
#构造邮件
msg=MIMEText(content) #msg为邮件内容对象
msg["Subject"]=subject
msg["Form"]=msg_from
msg["To"]=to
#发送邮件
try:
ss=smtplib.SMTP_SSL("smtp.163.com",465) #465为网易邮箱的端口号 ss是邮件对象
ss.login(msg_from,pwd)
ss.sendmail(msg_from,to,msg.as_string()) #发送邮件
print("邮件发送成功!")
except Exception as e:
print("邮件发送失败!错误信息:",e)
代码编写完成,运行代码,即可发送邮件到目标邮箱。
发送成功后,可以在qq邮箱中收到来自163邮箱的一封邮件:
可能出现的异常:
异常1:
500报错,官方解释为:发送的smtp命令语法有误;
意思就是代码语法错误,这时候检查一下代码,看是不是有明显的语法问题。如果没有检查到语法问题,那就可能跟计算机的DNS配置有关。
可以先看下计算机的DNS配置,查看方式:控制面板--网络和Internet--网络和共享中心--本地连接--详细信息
这时候可以看到网络连接的详细信息,如下图所示:
其中有一项为连接特定的DNS后缀,显示的值为DHCP HOST,现在需要做的就是修改这个值,把值修改为DHCP
操作步骤:
这样就把DNS后缀修改为HOST,再次查看网络连接详细信息,发现DSN后缀已经被修改了:
这时候再重新运行邮件发送程序代码,就不再报500的错误了。
异常2:
554报错,官方解释为:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件;
解决方法1:检查一下邮件的标题和内容,是否有敏感字符,如果有请删除或修改。
解决方法2:邮件的标题中不要包含 test、测试 之类的字符。
解决方法3:将发件人的邮箱地址添加到收件人中,如下图所示:
其中[email protected]为发件人,[email protected]为收件人,在收件人的邮箱地址中,使用逗号将发件人的邮件地址添加进去。
这时候再运行程序,不会再报554的异常了。
下面链接为网易邮箱邮件发送错误代码信息,可以根据报错信息查找错误原因:
http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html