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

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

本文详解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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。