1、代码如下:
import smtplib from email.message from EmailMessage # smtplib模块负责发送邮件服务 # email.message模块负责构建邮件,然后交给smtplib发送 # 定义SMTP服务器地址 smtp_server = 'smtp.163.com' # 定义发件人地址 from_addr = "***********@163.com" # 定义登录密码 password = '**********' # 定义收件人 to_addr = "**********@qq.com" # 创建SMTP连接 conn = smtplib.SMTP_SSL(smtp_server, 465) conn.set_debuglevel(1) conn.login(from_addr, password) # 创建邮件对象 msg = EmailMessage() # 设置邮件内容 msg.set_content('你好,我正在测试如何使用python发送电子邮件', 'plain', 'utf-8') # 设置邮件主题 msg['subject'] = "一封测试smtplib模块的邮件" msg['from'] = from_addr msg['to'] = to_addr # 发送邮件 conn.sendmail(from_addr, [to_addr], msg.as_string()) # 退出连接 conn.quit()
2、常见异常解决
2.1SMTPAuthenticationError
# 定义发件人地址 from_addr = "***********@163.com" # 定义登录密码 password = '**********' # 定义收件人 to_addr = "**********@qq.com" # 创建SMTP连接 conn = smtplib.SMTP_SSL(smtp_server, 465) conn.set_debuglevel(1) conn.login(from_addr, password)
出现这个错误是由于conn.login(from_addr, password)中的password不是登录客户端的密码,再强调一遍不是登录客户端的密码,是授权码,下面演示如何获取授权码,以
网易邮箱为例:
登录进入后,界面所示:
在设置里面有一个POP3/SMTP/IMAP,点击进入该页面,再点击箭头所示的客户端授权密码
要保证设置客户端授权码处于开启状态,如果记得就不用重置,如果不记得,就按照要求一步一步重置,然后用自己重置的授权码,作为登录密码就可以了。
2.2SMTPDataError
出现这样的异常是由于自己的邮件信息没有设置完整
# 创建邮件对象 msg = EmailMessage() # 设置邮件内容 msg.set_content('你好,我正在测试如何使用python发送电子邮件', 'plain', 'utf-8') # 发送邮件 conn.sendmail(from_addr, [to_addr], msg.as_string()) # 退出连接 conn.quit()
从上述代码中,我们知道从创建邮件对象开始,只设置了邮件内容,所有才会出现这样的错误,还有设置至少三个信息,这些信息会显示在你的邮件中。
# 邮件主题 msg['subject'] = "一封测试smtplib模块的邮件" # 邮件发送者 msg['from'] = from_addr # 邮件接收者 msg['to'] = to_addr
邮件对象添加这三个信息后,就能发送成功了。
3、参考链接
http://c.biancheng.net/view/2665.html
https://www.cnblogs.com/fengyiru6369/p/7472679.html
https://blog.csdn.net/qq_40423339/article/details/87866001