Python实现邮件发送功能的方法详解
本文详解Python实现邮件发送的完整流程,涵盖smtplib与email模块的核心用法。通过解析SMTP协议原理,演示如何构建邮件对象、连接服务器并处理登录验证。文章提供代码示例及常见避坑指南,包括授权码配置与多接收者支持,帮助开发者快速掌握邮件自动化发送技巧。
实现邮件自动化功能,需要引入以下新模块:
smtplib:负责邮件协议通信与发送操作的核心模块。
email:用于定义和管理邮件内容的模块。
schedule:提供定时任务调度功能的模块。
结合 smtplib 与 email 模块,可实现常规邮件的正常发送;而 schedule 模块则支持定时发送任务,例如在固定时间自动发送工资单等周期性邮件。
利用 Python 发送普通邮件
了解发送邮件的基本流程
此处简要描述邮件发送的具体步骤(此部分相对基础,非核心重点)。
第一步:登录邮箱服务器。
第二步:指定邮件接收者的邮箱地址。
第三步:撰写邮件标题与正文内容(视需求可添加附件)。
第四步:执行发送操作。
理解邮件通信协议
- SMTP:用于邮件发送的传输协议。
- POP3:用于邮件接收的传输协议。
什么是网络协议?
协议是一套既定的规则,底层网络已将其封装。开发者无需关注具体规则细节,直接调用上层工具接口即可。
以发送邮件为例,当网络识别到 SMTP 协议时,即判定为发送请求;同理,识别到 POP3 协议时,则判定为接收请求。
smtplib 模块详解
smtplib 是 Python 中实现邮件发送的关键模块之一。
创建协议对象:
smptObj = smtplib.SMTP():通过调用 smtplib.SMTP() 生成 SMTP 协议对象实例。
创建连接:
smptObj.connect(smpt服务器地址, 25):通过 connect(服务器IP地址, 端口号) 建立连接,SMTP 服务默认端口号为 25。
登录验证:
smptObj.login(mail_user, mail_password):通过 login(mail_user, mail_password) 传入邮箱账号与登录密码完成身份验证。(注意:部分邮箱服务器此处需传入授权码而非登录密码,具体需在邮箱设置中查看)。
发送邮件:
smptObj.sendmail(sender, receivers, message):通过 sendmail(sender, receivers, message) 传入发送者邮箱、接收者邮箱列表及邮件内容,即可完成发送动作。
注意:接收者邮箱参数名为 'receivers'(复数),表明其接受数组或列表格式,支持发送给多个收件人;消息内容 'message' 为经过加密处理的字符串对象。
email 包详解
email 包中两个常用函数如下:
| 函数名 | 参数 | 说明 |
|---|---|---|
| MIMEText | 邮件内容、邮件类型、编码格式 | 定义邮件发送内容的对象 |
| Header | 各类信息、编码格式 | 将各类信息定义成对象,比如标题等。 |
注:前文提到的 'message'(加密字符串)正是通过 'MIMEText' 函数加密生成的。
发送邮件实战案例
代码示例如下:
# coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
'''
第三方的 smpt [脚本中涉及的邮箱地址都是假的,请使用自己的真实邮箱地址进行测试]
'''
mail_host = "smtp.sina.com" # 设置邮箱服务器
mail_user = "conan868242" # 设置自己的邮箱
mail_pass = "cb997b01a87232b2" # 这里就是邮箱的口令,也就是授权码;不是密码。
sender = "conan868242@sina.com" # 定义发送者邮箱(其实就是自己)
receivers = ["3241716373@qq.com"] # 定义接受者邮箱(可以是多个接收者)
message = MIMEText("这是一封测试邮件 O(∩_∩)O哈哈~", "plain", "utf-8") # 定义邮件内容;"plain"是格式,表示是普通的文件内容
message["From"] = Header(sender) # 在message内定义发送信息 --> 发送者
message["Subject"] = Header("Python 测试邮件发送", "utf-8") # 在message内定义发送信息的标题
print("加密后的发送内容\n", message.as_string()) # 打印输出加密后的发送内容
try: # 捕获发送邮件的异常
smtpObj = smtplib.SMTP() # 实例化 SMTP 协议对象
smtpObj.connect(mail_host, 25) # 链接 SMTP 服务器
smtpObj.login(mail_user, mail_pass) # 登录邮箱验证
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送邮件; "message" 通过 "as_string()" 进行发送内容字符串的加密
except smtplib.SMTPException as error:
print("error:{}".format(error))
注:请勿直接使用此源码运行,文中已修改授权码以保护隐私。
运行结果如下:


发送邮件常见问题与避坑指南
确保发送者邮箱已开通 SMTP 与 POP3 访问权限。
不同邮箱服务商的验证方式存在差异(部分使用登录密码,部分强制使用授权码)。
部分邮箱开通高级访问权限或获取授权码可能涉及费用,需特别注意(例如 QQ 邮箱在此方面曾有争议,建议仔细检查)。
至此,关于 Python 实现邮件发送功能的方法详解介绍完毕。如需了解更多 Python 邮件发送相关内容,请搜索本站历史文章或继续浏览后续教程,感谢大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









