Python实现邮件发送功能的方法详解

山间有风
山间有风
发布时间:2026-10-15 | 6人浏览过
原创

本文详解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 邮件发送相关内容,请搜索本站历史文章或继续浏览后续教程,感谢大家的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表