Python: 通过QQ邮箱发送电子邮件
2023-06-13 09:12:58 时间
文章背景:自学Python编程快速上手
中关于发送电子邮件的章节。本文讲述如何通过Python,使用QQ邮箱发送电子邮件。
- 连接到SMTP服务器 import smtplib smtpObj = smtplib.SMTP('smtp.qq.com',587)
- 发送SMTP的“Hello”消息 smtpObj.ehlo()
- 开始TLS加密 smtpObj.starttls()
- 登陆到SMTP服务器 smtpObj.login('my_email_address@qq.com','MY_SECRET_PASSWORD') 对于MY_SECRET_PASSWORD,针对QQ邮箱,需要输入的是授权码。授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。适用于登录以下服务:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。 将密码放在源代码中要当心。调用input(),让用户输入密码是个好主意。
- 发送电子邮件
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
from_addr = 'my_email_address@qq.com' # 发件人
to_addr = 'recipient@example.com' # 收件人
message = MIMEText('Happy new year!', 'plain', 'utf-8') # 正文
message['From'] = _format_addr('Sam <%s>' % from_addr) # 发件人
message['To'] = _format_addr('Python lover <%s>' % to_addr) # 收件人
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8') #主题
smtpObj.sendmail(from_addr, [to_addr], message.as_string())
- 邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发送出去,而是包含在发给message的文本中。所以,我们必须把
From
、To
和Subject
添加到MIMEText
中,才是一封完整的邮件。 - 函数
_format_addr()
用来格式化一个邮件地址;如果包含中文,需要通过Header
对象进行编码。 - message['To']接收的是字符串而不是list,如果有多个邮件地址,用
,
分隔即可。 sendmail()
方法就是发邮件,由于可以一次发给多个人,所以传入一个list
,邮件正文是一个str
,as_string()
把MIMEText
对象变成str
。
- 从SMTP服务器断开
smtpObj.quit()
代码汇总
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
# 1. 连接到SMTP服务器
smtpObj = smtplib.SMTP('smtp.qq.com',587)
# 2. 发送SMTP的“HELLO”消息
smtpObj.ehlo()
# 3. 开始TLS加密
smtpObj.starttls()
# 4. 登陆到SMTP服务器
smtpObj.login('my_email_address@qq.com','MY_SECRET_PASSWORD')
# 5. 发送电子邮件
from_addr = 'my_email_address@qq.com' # 发件人
to_addr = 'recipient@example.com' # 收件人
message = MIMEText('Happy new year!', 'plain', 'utf-8') # 正文
message['From'] = _format_addr('Sam <%s>' % from_addr) # 发件人
message['To'] = _format_addr('Python lover <%s>' % to_addr) # 收件人
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8') #主题
smtpObj.sendmail(from_addr, [to_addr], message.as_string())
# 6. 从服务器断开
smtpObj.quit()
print("Done!")
运行代码后,打开收件箱,效果如下:
参考资料:
[1] Python编程快速上手—让繁琐工作自动化(https://ddz.red/AFTmO)
[2] QQ邮箱的POP3与SMTP服务器(https://service.mail.qq.com/cgi-bin/help?subtype=1&no=167&id=28)
[3] 授权码(https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256%27)
[4] SMTP发送邮件(https://www.liaoxuefeng.com/wiki/1016959663602400/1017790702398272)
[5] Python SMTP发送邮件(https://www.runoob.com/python/python-email.html)
相关文章
- 【python教程入门学习】PyCharm下载和安装教程(包含配置Python解释器)
- 二级Python选择题_二级python选择题题库
- python ZipFile: output zip file,ByteIO
- python电脑版微信-微信PC版的API接口 | 可通过Python调用微信功能
- Python&R语言-python和r相遇
- python教程:用简单的Python编写Web应用程序
- python监控网站更新_Python 通过网站search功能监控网站内容更新[通俗易懂]
- 【文末送书】对于入门Python数据分析和数据可视化,我想推荐一下这本书!
- Python里divmod_python yield函数
- python最好的开发工具_Python编译器
- 【说站】python str.zfill填充字符串
- Python的特点是什么_python具有的特点
- Python 反转字符串_python输出字符串
- python判断文件后缀_Python 判断文件后缀是否被篡改
- Python 输出对齐「建议收藏」
- Python_字符串常用函数和方法(3)_Python自学第十五节
- 【测试开发】python系列教程:Python注释和解释器
- 3.7k stars Python实现的地理编码测量距离查询工具
- python-Python与SQLite数据库-使用Python执行SQLite查询(一)
- python-Python与PostgreSQL数据库-使用Python执行PostgreSQL查询(一)
- Python 强化学习实用指南:6~10
- Python中数组用法大全详解编程语言
- NSA 的 Python 手册
- 游戏人间: 在 Linux 上玩 QQ 游戏(qq游戏linux)
- Python在MSSQL中的应用实践(python与mssql)