首页 游戏 软件 资讯 排行榜 专题
首页
编程语言
使用Python程序自动发送邮件的完整流程

使用Python程序自动发送邮件的完整流程

热心网友
79
转载
2026-04-16

01 准备工作

使用Python程序自动发送邮件的第一步,是完成邮箱的客户端授权配置。这个过程并不复杂,核心在于开启SMTP/POP3服务并获取一个专用的授权码。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

首先,登录您的邮箱(例如QQ邮箱、163邮箱或126邮箱),进入“设置”或“账户”管理页面,找到“POP3/SMTP服务”或类似选项并将其开启。最关键的一步是:根据页面提示生成一个“授权码”。这个授权码将替代您的邮箱密码,作为程序登录验证的唯一凭证,请务必立即妥善保存,因为它通常只显示一次。

使用Python程序自动发送邮件的完整流程

使用Python程序自动发送邮件的完整流程

使用Python程序自动发送邮件的完整流程

以上图示分别展示了在QQ邮箱、126邮箱和163邮箱中开启相关服务的界面,不同邮箱的操作流程基本相似。

服务开启后,您的程序需要知道邮件服务器的地址(主机)和端口号才能建立连接。不同邮箱服务商的服务器信息略有不同,以下是常用邮箱的配置信息汇总:

163邮箱的服务器地址和端口配置如下:

使用Python程序自动发送邮件的完整流程

126邮箱的配置:其SMTP服务器地址为 smtp.126.com,POP3服务器地址为 pop.126.com,常用端口号与163邮箱一致。

QQ邮箱的配置:SMTP服务器地址是 smtp.qq.com,常用端口为587(STARTTLS)或465(SSL);POP3服务器地址为 pop.qq.com,端口为110或995。

简单来说,SMTP(简单邮件传输协议)专门负责“发送”邮件,而POP3(邮局协议第3版)则负责“接收”邮件。本文重点讲解邮件发送,因此请牢记您所用邮箱的SMTP服务器地址和对应端口。

正确配置这些连接参数,是确保Python脚本能够与邮件服务器成功“握手”并顺利发送邮件的基础。

02 发送邮件程序用到的核心库与函数介绍

在Python中实现邮件自动发送,主要依赖于标准库中的 smtplibemail 模块。smtplib 负责与邮件服务器建立连接并进行通信,email 则负责构建和格式化邮件内容。下面详细介绍其中的核心类与函数。

1. smtplib.SMTP():创建SMTP连接

  • 功能:此函数用于初始化一个SMTP客户端连接对象,连接到指定的邮件服务器。它支持通过TLS/SSL加密通信,保障登录凭据和邮件内容传输的安全性。
  • 参数:主要参数为 host(邮件服务器主机名,如smtp.qq.com)和 port(端口号)。
  • 案例:以连接QQ邮箱服务器为例,通常有两种连接方式:
import smtplib
# 方式一:先建立非加密连接,再升级为TLS加密(常用于端口587)
server = smtplib.SMTP('smtp.qq.com', 587)
server.starttls() # 启动TLS加密
server.login('xxx@qq.com', '你的授权码或密码')

# 方式二:直接建立SSL加密连接(常用于端口465)
server = smtplib.SMTP_SSL('smtp.qq.com', 465)
server.login('xxx@qq.com', '你的授权码或密码')

重要提示:目前主流邮箱服务(如QQ邮箱、163邮箱等)出于安全考虑,均要求使用授权码而非邮箱登录密码进行第三方客户端登录。请务必使用您在准备阶段获取的授权码。

2. email.mime模块:构建邮件内容

建立连接后,需要构造邮件体。email.mime 子模块提供了多种MIME(多用途互联网邮件扩展)类型类,用于创建不同格式的邮件内容。

1)email.mime.text.MIMEText():创建文本邮件

使用Python程序自动发送邮件的完整流程

这是最基础的类,用于创建纯文本或HTML格式的邮件正文。其核心参数决定了邮件内容的呈现方式:

  • _text: 邮件正文内容,可以是普通字符串或HTML代码字符串。
  • _subtype='plain' :内容子类型。设置为 'plain' 表示纯文本邮件;设置为 'html' 则表示HTML格式邮件。
  • _charset='utf-8':字符编码集。为确保中文等非ASCII字符正常显示,强烈建议设置为 utf-8
  • policy:此参数用于控制邮件生成和解析的策略细节,如头部格式、编码方式等。对于大多数应用场景,使用默认策略即可。高级用法可参考附录的详细说明。
from email.mime.text import MIMEText
# 创建纯文本邮件内容
text = "这是一封测试邮件!"
msg = MIMEText(text, 'plain', 'utf-8')

# 创建HTML格式邮件内容
html = """


欢迎订阅周报

本周热点:...

""" msg = MIMEText(html, 'html', 'utf-8')

2)email.mime.multipart.MIMEMultipart():创建多格式邮件(支持附件)

当需要发送同时包含正文和附件的邮件时,需要使用 MIMEMultipart 类。它作为一个容器,可以容纳多个MIME部件,例如文本、图片、文件等。

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

# 创建一个多部分邮件容器
msg = MIMEMultipart()

# 向容器中添加文本部件
msg.attach(MIMEText("这里是邮件正文", 'plain', 'utf-8'))

# 添加附件,例如一个Excel文件
with open('月度报告.xlsx', 'rb') as f: # 以二进制模式读取文件
    part = MIMEApplication(f.read(), Name='月度报告.xlsx')
    # 设置内容处置头,指示此为附件并指定文件名
    part['Content-Disposition'] = f'attachment; filename="月度报告.xlsx"'
    msg.attach(part)

3. 邮件头部设置

邮件内容构建完成后,需要设置其头部信息,如同填写快递单。通过为邮件对象(msg)的字典属性赋值即可完成:

  • msg['Subject'] = '会议通知':设置邮件主题。
  • msg['From'] = 'your_email@example.com':设置发件人地址。
  • msg['To'] = 'friend1@xx.com, friend2@xx.com':设置收件人地址,多个地址可用逗号分隔。

4. server.sendmail():发送邮件

功能:此方法执行最终的邮件发送操作,将构建好的邮件对象传输至服务器。

参数from_addr:发件人邮箱地址;to_addrs:收件人邮箱地址列表(字符串或列表);msg.as_string():将邮件对象序列化为符合SMTP协议格式的字符串。

案例:完整的发送流程示例

# 假设msg邮件对象已构建并设置好头部
server.sendmail('sender@xxx.com', ['receiver1@xxx.com', 'receiver2@xxx.com'], msg.as_string())
server.quit() # 发送完成后,关闭连接

5、实际案例

掌握理论后,通过实际代码案例能更好地理解应用。以下三个案例涵盖了最常见的邮件发送需求。

案例 1:发送纯文本邮件

import smtplib
from email.mime.text import MIMEText

# 1. 连接服务器 (以126邮箱为例,使用端口25)
server = smtplib.SMTP('smtp.126.com', 25)
server.starttls() # 启用TLS加密
server.login('your_email@126.com', '你的授权码') # 使用授权码登录

# 2. 构建纯文本邮件
text = "这是一封纯文本测试邮件!"
msg = MIMEText(text, 'plain', 'utf-8')
msg['Subject'] = '测试主题'
msg['From'] = 'your_email@126.com'
msg['To'] = 'recipient1@xx.com, recipient2@xx.com'

# 3. 执行发送
server.sendmail(msg['From'], msg['To'].split(','), msg.as_string())
server.quit()
print("纯文本邮件发送成功!")

请务必将代码中的发件人邮箱、收件人邮箱和授权码替换为您自己的有效信息。

案例 2:发送带HTML格式的邮件

import smtplib
from email.mime.text import MIMEText

server = smtplib.SMTP('smtp.126.com', 25)
server.starttls()
server.login('your_email@126.com', '你的授权码')

# 关键区别:_subtype 参数设置为 'html'
html_content = """


    

本周技术周报

最新动态:Python 3.12 发布...

点击查看详情 """ msg = MIMEText(html_content, 'html', 'utf-8') # 注意第二个参数 msg['Subject'] = 'HTML格式周报' msg['From'] = 'your_email@126.com' msg['To'] = 'recipient@xx.com' server.sendmail(msg['From'], [msg['To']], msg.as_string()) server.quit()

案例 3:发送带附件的邮件

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

server = smtplib.SMTP('smtp.126.com', 25)
server.starttls()
server.login('your_email@126.com', '你的授权码')

# 使用 MIMEMultipart 作为根容器
msg = MIMEMultipart()
msg['Subject'] = '月度数据报告'
msg['From'] = 'your_email@126.com'
msg['To'] = 'recipient@xx.com'

# 添加文本正文部分
msg.attach(MIMEText("您好,附件是本月数据报告,请查收。", 'plain', 'utf-8'))

# 添加附件部分
filename = 'monthly_report.pdf'
with open(filename, 'rb') as f:
    part = MIMEApplication(f.read(), Name=filename)
    part['Content-Disposition'] = f'attachment; filename="{filename}"'
    msg.attach(part)

server.sendmail(msg['From'], [msg['To']], msg.as_string())
server.quit()

03 附录

常用的policy策略

在构建邮件对象时,policy 参数扮演着“策略控制器”的角色,它精细地管理着邮件格式、编码和兼容性等底层细节。了解不同策略有助于应对特定场景。

1. email.policy.default

功能:这是默认策略,遵循通用的电子邮件标准。它会保留邮件头原始的大小写格式,并使用系统默认的编码方式,适用于绝大多数常规邮件发送任务。

适用场景:日常的自动化邮件发送,无需特殊处理时,使用此策略即可。

2. email.policy.SMTP

功能:一个严格遵守SMTP协议的策略。它会将邮件头字段名转换为大写,并严格遵循协议规范处理编码和换行符。

适用场景:当需要与对协议格式要求极其严格的邮件服务器或网关进行交互时,采用此策略可以最大程度避免兼容性问题。

3. email.policy.compat32

功能:一个向后兼容的策略,旨在保持与Python 3.2及更早版本中 email 模块处理逻辑的一致性。

适用场景:如果你的代码运行环境或与之交互的系统依赖于旧版Python的邮件处理行为,可考虑使用此策略以确保一致性。

4. email.policy.SMTPUTF8

功能:在 SMTP 策略基础上扩展,专门支持SMTPUTF8扩展,允许在邮件头(如主题、发件人名称)中直接使用UTF-8编码的字符。

适用场景:发送包含中文、日文、表情符号(emoji)等非ASCII字符的邮件主题或发件人名称时,使用此策略能有效防止出现乱码。

总而言之,掌握Python邮件发送技术,就如同为您的自动化工作流配备了一把多功能工具。无论是实现系统监控告警、定时发送业务报表、批量投递营销信息,还是将其作为数据爬取或分析脚本的结果推送渠道,都能显著提升工作效率。

希望这份从环境配置、库函数解析到实战案例的完整指南,能帮助您快速上手并实现Python自动发送邮件的功能。在此基础上,您可以进一步探索邮件模板定制、邮件列表群发、发送失败重试等更高级的应用场景。

来源:https://www.jb51.net/python/3622908wp.htm
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

mysql如何在Python开发环境中配置连接驱动_安装mysql-connector
数据库
mysql如何在Python开发环境中配置连接驱动_安装mysql-connector

Python连接MySQL驱动安装指南:直接装mysql-connector-python,别用mysql-connector 在Python项目中配置MySQL数据库连接,第一步选择正确的驱动包至关重要。许多开发者首次尝试时就会遇到安装失败或连接报错的问题。请牢记这个核心解决方案:务必直接安装 m

热心网友
04.16
处理 10GB 文件不爆内存,Python 迭代器凭什么
业界动态
处理 10GB 文件不爆内存,Python 迭代器凭什么

1 场景案例:Python大文件处理 去年遇到一个数据清洗任务,日志文件足足有12GB。同事的第一反应很直接:用readlines()把文件全部读进内存,再逐条处理。结果程序跑了三分钟,直接报了个MemoryError。 其实只改了一个地方:把readlines()换成直接遍历文件对象。就这么一个

热心网友
04.16
使用Python程序自动发送邮件的完整流程
编程语言
使用Python程序自动发送邮件的完整流程

01 准备工作 使用Python程序自动发送邮件的第一步,是完成邮箱的客户端授权配置。这个过程并不复杂,核心在于开启SMTP POP3服务并获取一个专用的授权码。 首先,登录您的邮箱(例如QQ邮箱、163邮箱或126邮箱),进入“设置”或“账户”管理页面,找到“POP3 SMTP服务”或类似选项并将

热心网友
04.16
Python 3与Python的区别
编程语言
Python 3与Python的区别

Python 3与Python 2:那些你必须了解的关键演变 在软件开发、数据科学以及人工智能等前沿领域,Python语言占据着举足轻重的地位。伴随着语言的持续演进,从Python 2升级到Python 3是一次里程碑式的重大变革。尽管两者在语法上存在继承关系,但诸多核心差异深刻影响着代码的兼容性与

热心网友
04.16
Pywinrm,一个 Python 管理利器!
业界动态
Pywinrm,一个 Python 管理利器!

Pywinrm:打通跨平台管理的最后一公里 在混合IT环境里,Linux机器想管Windows服务器,这事儿一直挺让人头疼的。你猜怎么着?当SSH够不着Windows,PowerShell Remoting又没个统一的Python接口时,pywinrm模块就登场了。它通过Windows远程管理(Wi

热心网友
04.15

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

云顶之弈s17重装妖姬阵容推荐
游戏攻略
云顶之弈s17重装妖姬阵容推荐

云顶之弈S17星神赛季:重装妖姬阵容深度解析与上分攻略 云顶之弈S17“星神”赛季现已全面开启,全新羁绊、英雄与赛季机制为战场带来了颠覆性的变化。在众多阵容套路中,一套以“诡术妖姬”乐芙兰为主C,搭配重装战士与法官羁绊的体系表现尤为亮眼,成为当前版本稳定上分的强力选择。本文将为您深度解析这套重装妖姬

热心网友
04.16
Win11 1月更新KB5074109新BUG:云存储文件导致 OneDrive 等应用卡死
系统平台
Win11 1月更新KB5074109新BUG:云存储文件导致 OneDrive 等应用卡死

微软1月更新KB5074109新BUG:云存储文件导致OneDrive等应用卡死 近日,微软Windows用户遭遇了一个普遍困扰。1月20日,微软在其官方Windows发布健康仪表板上更新了状态,正式确认了1月累积更新KB5074109中存在一个影响广泛的缺陷。该问题波及了从Windows 10到W

热心网友
04.16
如何在Linux上列出服务? Systemctl列出Linux所有服务的技巧
系统平台
如何在Linux上列出服务? Systemctl列出Linux所有服务的技巧

在Linux系统管理中,Systemctl被誉为服务管理的“全能指挥官”。无论是启动核心服务、监控运行状态,还是进行系统故障排查,它都是管理员必备的利器。本文将深入解析如何利用Systemctl命令全面查看系统所有服务,并掌握高效管理技巧。 什么是 Systemctl? Systemctl是syst

热心网友
04.16
苹果macOS 26.4开发者预览版 Beta 2发布:修复窗口缩小指针不跟随问题
系统平台
苹果macOS 26.4开发者预览版 Beta 2发布:修复窗口缩小指针不跟随问题

苹果macOS 26 4开发者预览版 Beta 2发布:修复窗口缩小指针不跟随问题 苹果公司如期发布了面向Mac用户的macOS 26 4第二个开发者预览版(Beta 2),内部版本号为25E5218f。此次更新距离上一个Beta RC版本发布正好一周,延续了苹果系统更新的稳定节奏。 如何升级 iO

热心网友
04.16
亿万光年舰船编队养成指南
游戏攻略
亿万光年舰船编队养成指南

《亿万光年》:从舰船养成到战场微操,一份深度编队指南 在《亿万光年》的浩瀚星海中,想要成为一位合格的星际指挥官,核心秘诀无外乎两点:扎实的舰船养成与灵活的编队搭配,再辅以关键时刻的战场微操。这套组合拳,是应对宇宙中各种复杂战局的不二法门。今天,我们就来深入拆解这套玩法体系,助你打造一支所向披靡的无敌

热心网友
04.16