当前位置: 代码网 > it编程>前端脚本>Python > Python实现邮件自动群发功能

Python实现邮件自动群发功能

2026年08月10日 Python 我要评论
在日常办公中,经常需要批量发送通知、报表或问候邮件。下面提供一份可直接复制的 python 脚本,支持 smtp 协议,兼容 qq邮箱 / 163邮箱 / gmail 等主流邮箱。一、准备工作1. 安

在日常办公中,经常需要批量发送通知、报表或问候邮件。下面提供一份可直接复制的 python 脚本,支持 smtp 协议,兼容 qq邮箱 / 163邮箱 / gmail 等主流邮箱。

一、准备工作

1. 安装所需库(无需额外安装)

python 内置 smtplibemail 模块,无需 pip 安装任何第三方包。

2. 获取邮箱授权码(非登录密码)

以 qq邮箱为例:

  • 进入设置 → 账户 → pop3/smtp服务 → 开启并生成授权码
  • 记录下这个16位授权码,后续作为密码使用

其他邮箱同理,均需开启 smtp 服务并获取专用密码。

二、完整代码(复制即可用)

import smtplib
from email.mime.text import mimetext
from email.mime.multipart import mimemultipart
from email.header import header
import time
def send_emails(sender_email, sender_password, receivers, subject, content,
                smtp_server="smtp.qq.com", smtp_port=465, use_ssl=true):
    """
    批量发送邮件
    参数说明:
        sender_email:     发件人邮箱地址
        sender_password:  邮箱授权码(非登录密码)
        receivers:        收件人列表,如 ["a@qq.com", "b@163.com"]
        subject:          邮件主题
        content:          邮件正文(支持html格式)
        smtp_server:      smtp服务器地址,默认qq邮箱
        smtp_port:        端口,ssl默认465,tls默认587
        use_ssl:          是否使用ssl加密,默认true
    """
    # 统计结果
    success_count = 0
    fail_list = []
    for i, receiver in enumerate(receivers):
        try:
            # 创建邮件对象
            msg = mimemultipart('alternative')
            msg['from'] = sender_email
            msg['to'] = receiver
            msg['subject'] = header(subject, 'utf-8')
            # 添加正文(支持html)
            msg.attach(mimetext(content, 'html', 'utf-8'))
            # 连接smtp服务器
            if use_ssl:
                server = smtplib.smtp_ssl(smtp_server, smtp_port)
            else:
                server = smtplib.smtp(smtp_server, smtp_port)
                server.starttls()
            server.login(sender_email, sender_password)
            server.sendmail(sender_email, [receiver], msg.as_string())
            server.quit()
            success_count += 1
            print(f"[成功] 第{i+1}封 -> {receiver}")
            # 避免触发频率限制,每次发送间隔1秒
            time.sleep(1)
        except exception as e:
            fail_list.append((receiver, str(e)))
            print(f"[失败] 第{i+1}封 -> {receiver},原因:{e}")
    # 输出汇总
    print("\n" + "="*40)
    print(f"发送完成!成功:{success_count},失败:{len(fail_list)}")
    if fail_list:
        print("失败详情:")
        for addr, reason in fail_list:
            print(f"  {addr}: {reason}")
    return success_count, fail_list
# ========== 使用示例 ==========
if __name__ == "__main__":
    # -------- 配置区(请修改为实际信息)--------
    my_email = "your_email@qq.com"          # 你的邮箱
    my_password = "your_authorization_code" # 邮箱授权码
    receivers = [
        "colleague1@company.com",
        "colleague2@company.com",
        "colleague3@company.com"
    ]
    subject = "【重要】本周工作安排通知"
    content = """
    <h3>各位同事好:</h3>
    <p>以下是本周工作安排:</p>
    <ul>
        <li>周一:项目进度汇报</li>
        <li>周三:部门例会(14:00 会议室a)</li>
        <li>周五:提交周报</li>
    </ul>
    <p>如有疑问请及时联系我。</p>
    <br>
    <p style="color:gray;">此邮件由系统自动发送,请勿回复。</p>
    """
    # 执行发送
    send_emails(
        sender_email=my_email,
        sender_password=my_password,
        receivers=receivers,
        subject=subject,
        content=content
    )

三、常见邮箱smtp配置

邮箱

smtp服务器

ssl端口

tls端口

qq邮箱

smtp.qq.com

465

587

163邮箱

smtp.163.com

465

25

gmail

smtp.gmail.com

465

587

企业微信邮箱

smtp.exmail.qq.com

465

587

使用时只需修改 send_emails() 中的 smtp_serversmtp_port 参数即可。

四、进阶功能

1. 添加附件

from email.mime.base import mimebase
from email import encoders
# 在创建msg后添加
with open("report.xlsx", "rb") as f:
    attachment = mimebase('application', 'octet-stream')
    attachment.set_payload(f.read())
    encoders.encode_base64(attachment)
    attachment.add_header('content-disposition', 'attachment', filename='report.xlsx')
    msg.attach(attachment)

2. 从excel读取收件人

import pandas as pd
df = pd.read_excel("contacts.xlsx")
receivers = df["邮箱"].tolist()

3. 发送个性化内容(替换姓名等)

for name, email in zip(names, emails):
    personalized_content = content.replace("{姓名}", name)
    # ... 调用发送函数

五、注意事项

  1. 频率限制:大多数免费邮箱每天有发送上限(qq约500封/天),且短时间内发送过快可能被暂时封禁。建议每封间隔1~3秒。
  2. 授权码安全:不要将授权码硬编码在公开仓库中,建议使用环境变量或配置文件。
  3. 垃圾邮件:纯文本内容容易被判为垃圾邮件,建议使用html模板并包含退订链接。
  4. 错误处理:生产环境中建议增加重试机制和日志记录。
  5. 合规性:确保收件人同意接收邮件,遵守《反垃圾邮件法》相关规定。

以上就是python实现邮件自动群发功能的详细内容,更多关于python邮件自动群发的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com