零基础教你如何使用Python批量发送邮件

 更新时间:2026年04月03日 08:19:18   作者:小庄-Python办公  
在日常工作和学习中,我们经常会遇到需要向多人发送通知、邀请函或工资条的情况,本文将作为一份面向完全零基础新手的系统性指南,带你一步步掌握使用Python批量发送邮件的技能

在日常工作和学习中,我们经常会遇到需要向多人发送通知、邀请函或工资条的情况。如果手动一封封发送,不仅耗时耗力,还容易出错。幸运的是,通过Python,我们可以轻松实现邮件的批量、自动化发送,甚至可以为每个人定制专属的称呼。

本文将作为一份面向完全零基础新手的系统性指南,带你一步步掌握使用Python批量发送邮件的技能。

1. 引言 (Introduction)

为什么选择用Python发邮件?

  • 极速高效:几秒钟内即可将上百封邮件准确发送完毕。
  • 高度个性化:可以结合数据(如Excel表格),让每一封邮件拥有不同的收件人姓名和专属内容。
  • 自动化:写好代码后,可以设置为定时任务,完全解放双手。

在Python中,处理邮件主要依赖两个内置模块:smtplib(负责连接服务器并发送邮件)和 email(负责构建邮件的标题、正文等内容)。因为它们是内置的,所以你不需要额外安装任何第三方库即可上手。

2. 准备工作 (Prerequisites)

在开始写代码之前,你需要准备好以下几样东西:

安装好的Python环境:确保你的电脑上已经安装了Python(建议版本3.6以上)。你可以使用任何代码编辑器,如VS Code、PyCharm,甚至自带的IDLE。

一个用于发信的邮箱账号:QQ邮箱、网易163邮箱、新浪邮箱等均可。

开启SMTP服务并获取“授权码”

  • 注意:为了安全,现在的邮箱程序不允许直接使用你的登录密码来通过代码发邮件。你需要使用授权码(App Password)
  • 获取方法(以QQ邮箱为例):登录网页版QQ邮箱 -> 点击顶部的【设置】 -> 【账户】 -> 找到【POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务】 -> 开启【POP3/SMTP服务】 -> 点击【生成授权码】。请将这串字母/数字保存好,代码中会用到。

3. 分步指南 (Step-by-Step Guide)

我们将通过一个完整的示例,演示如何向一个名单里的所有人发送带有专属称呼的问候邮件。

步骤 1:导入必要的库

首先,我们需要在代码开头引入Python内置的邮件处理工具。

import smtplib  # 用于发送邮件的协议模块
from email.mime.text import MIMEText  # 用于构建纯文本或HTML邮件正文
from email.header import Header  # 用于处理邮件的主题(标题)编码
import time  # 用于添加发送间隔,防止被识别为垃圾邮件

步骤 2:设置发件人信息与服务器

接下来,配置你的邮箱账号、授权码以及对应的SMTP服务器地址。

# 1. 邮箱基础设置
smtp_server = "smtp.qq.com"  # QQ邮箱的SMTP服务器地址 (163邮箱为 smtp.163.com)
smtp_port = 465              # SSL安全连接的标准端口号通常是465

sender_email = "your_email@qq.com"  # 替换为你的真实发件邮箱
auth_code = "abcdefghijklmnop"      # 替换为刚才获取的邮箱授权码(非登录密码)

步骤 3:准备收件人列表

为了演示批量发送,我们使用一个包含多个收件人信息的列表(List)。在实际应用中,这些数据通常来自Excel表格。

# 2. 准备收件人数据 (包含姓名和邮箱地址)
receivers = [
    {"name": "张三", "email": "zhangsan@example.com"},
    {"name": "李四", "email": "lisi@example.com"},
    # 你可以在这里继续添加更多的收件人
]

步骤 4:构建邮件内容并批量发送

这是最核心的一步。我们需要登录服务器,然后通过一个循环(Loop),为列表中的每个人生成专属邮件并发送。

# 3. 连接服务器并批量发送
try:
    # 建立安全的SSL连接
    server = smtplib.SMTP_SSL(smtp_server, smtp_port)
    # 登录邮箱
    server.login(sender_email, auth_code)
    print("成功登录邮箱服务器!开始发送邮件...\n")

    # 遍历收件人列表,逐个发送
    for person in receivers:
        receiver_name = person["name"]
        receiver_email = person["email"]

        # 构建个性化邮件正文
        mail_content = f"""
        亲爱的 {receiver_name}:
        
        你好!这是一封由Python自动发送的测试邮件。
        祝你今天工作顺利,学习进步!
        
        发件人:Python自动化助手
        """
        
        # 将正文转化为邮件对象 (内容, 格式, 编码)
        message = MIMEText(mail_content, 'plain', 'utf-8')
        
        # 设置邮件的 发件人、收件人 和 主题
        message['From'] = Header("自动化助手", 'utf-8')  # 发件人昵称
        message['To'] = Header(receiver_name, 'utf-8')   # 收件人昵称
        message['Subject'] = Header("Python批量发送邮件测试", 'utf-8') # 邮件标题

        # 发送邮件
        server.sendmail(sender_email, receiver_email, message.as_string())
        print(f"✅ 成功发送邮件给: {receiver_name} ({receiver_email})")
        
        # 暂停2秒,避免发送过快被封禁
        time.sleep(2)

    print("\n🎉 所有邮件发送完毕!")

except smtplib.SMTPException as e:
    print(f"❌ 邮件发送失败,错误信息:{e}")
finally:
    # 无论成功与否,最后都要关闭服务器连接
    server.quit()

4. 常见问题与避坑指南 (Common Pitfalls)

在实际操作中,新手常常会遇到以下几个“坑”,请务必注意:

密码错误 (Authentication failed)

避坑:绝大多数情况是因为使用了邮箱的登录密码而不是授权码。请务必去邮箱设置中生成授权码并填入代码中。

被识别为垃圾邮件 (Spam / Banned)

避坑:如果你一次性发送成百上千封邮件,或者发送频率极快,邮箱服务商会把你的账号当成发送垃圾邮件的机器人。解决方案是在循环中使用 time.sleep(2) 暂停几秒钟,并尽量避免在邮件中包含敏感或推销词汇。

端口和服务器地址错误

避坑:不同邮箱的SMTP服务器地址和端口不同。例如,网易163邮箱是 smtp.163.com,腾讯企业邮箱是 smtp.exmail.qq.com。使用前请百度查询对应邮箱的SMTP设置。

发件人/收件人显示为 unknown

避坑:这是因为没有正确设置 message['From']message['To'] 字段。必须按照步骤4中的代码,使用 Header 进行规范的编码转换。

5. 总结与进阶资源 (Conclusion & Resources)

恭喜你!到这里你已经掌握了使用Python批量发送邮件的基础技能。这不仅能极大地提升你的工作效率,也是迈向“Python自动化办公”的重要一步。

下一步进阶建议:

  • 结合Excel读取数据:你可以学习使用 pandasopenpyxl 库。先让Python从Excel表格中读取员工的姓名、邮箱和工资数据,然后再结合本文的代码,实现批量发送定制工资条的功能。
  • 发送带附件和HTML格式的邮件:学习 email.mime.multipartemail.mime.application 模块,可以让你的邮件支持发送图片、PDF附件,或者拥有精美排版的网页(HTML)正文。
  • 使用更高级的第三方库:当你熟悉了底层原理后,可以尝试使用第三方库 yagmail。它对 smtplib 进行了深度封装,能让你用短短三五行代码就完成带附件的邮件发送,语法更加简洁友好。

编程的乐趣在于解决实际问题。现在,就打开你的代码编辑器,试着给自己或朋友发送第一封Python自动化邮件吧!

到此这篇关于零基础教你如何使用Python批量发送邮件的文章就介绍到这了,更多相关Python批量发送邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Python 多重继承时metaclass conflict问题解决与原理探究

    关于Python 多重继承时metaclass conflict问题解决与原理探究

    这篇文章主要介绍了Python 多重继承时metaclass conflict问题解决与原理探究 ,需要的朋友可以参考下
    2022-10-10
  • Python itertools模块详解

    Python itertools模块详解

    这篇文章主要介绍了Python itertools模块详解,本文基本是基于文档的翻译和补充,相当于翻译了,需要的朋友可以参考下
    2015-05-05
  • minconda安装pytorch的详细方法

    minconda安装pytorch的详细方法

    这篇文章主要介绍了minconda安装pytorch的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • python打印exception信息的方法

    python打印exception信息的方法

    这篇文章主要介绍了python打印exception信息的相关知识,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • python判断字符串以什么结尾的实例方法

    python判断字符串以什么结尾的实例方法

    在本篇文章里小编给大家整理了关于python判断字符串以什么结尾的实例方法 ,需要的朋友们可以学习参考下。
    2020-09-09
  • python多任务之协程的使用详解

    python多任务之协程的使用详解

    这篇文章主要介绍了python多任务之协程的使用,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Python 中OS module的使用详解

    Python 中OS module的使用详解

    这篇文章主要介绍了Python 中OS module的使用详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Python中re模块的元字符使用小结

    Python中re模块的元字符使用小结

    元字符是正则表达式中具有特殊意义的专用字符,本文主要介绍了Python中re模块的元字符使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 详解在Python中使用OpenCV进行直线检测

    详解在Python中使用OpenCV进行直线检测

    在图像处理中,直线检测是一种常见的算法,它通常获取n个边缘点的集合,并找到通过这些边缘点的直线。本文将介绍如何在Python中利用OpenCV进行直线检测,需要的可以参考一下
    2022-03-03
  • Python实现SVM支持向量机的示例代码

    Python实现SVM支持向量机的示例代码

    SVM 的目的是在数据集中找到一条最佳分隔超平面,使得在这个超平面两侧的数据分别属于不同的类别,且该超平面与最近的数据点之间的距离最大。本文将通过Python实现SVM支持向量机,感兴趣的可以了解一下
    2023-02-02

最新评论