首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python系列教程(8)-用smptlib和email自动发送邮件

在现代办公中,邮件是一种不可或缺的沟通工具。然而,手动发送大量的邮件不仅耗时,还容易出错。Python 提供了强大的 smtplib 和 email 库,可以帮助我们实现邮件的自动化操作,例如批量发送通知、定时发送日报或周报等。

今天,我们将学习如何利用这两个库轻松实现邮件自动化操作。

1. 什么是 smtplib 和 email?

smtplib:一个用于与邮件服务器通信的库,基于 SMTP 协议(Simple Mail Transfer Protocol)。通过它,我们可以向任意邮箱发送邮件。

email:一个处理邮件内容的库,可以用来构建邮件的正文、附件、图片等复杂内容。

两者结合使用,可以轻松完成邮件的自动发送任务。

2. 环境准备

在开始之前,请确保你的电脑上安装了 Python(推荐 3.x 版本)。以下是所需库的安装:

pip install smtplib email

email 是 Python 标准库的一部分,因此通常无需额外安装。

3. 基本的邮件发送

首先,我们来看一个简单的例子,通过 smtplib 和 email 发送一封纯文本邮件。

3.1 代码示例:发送纯文本邮件

import smtplibfrom email.mime.text import MIMEText

# 邮件服务器配置SMTP_SERVER = "smtp.gmail.com" # 以 Gmail 为例SMTP_PORT = 587

# 发送方和接收方sender_email = "your_email@gmail.com"sender_password = "your_password" # 请勿直接暴露密码,可使用环境变量或应用密码receiver_email = "recipient_email@gmail.com"

# 创建邮件内容subject = "日报提醒"body = "您好,这是今天的日报,请查收。"

# 构建 MIMEText 对象msg = MIMEText(body, "plain", "utf-8")msg["Subject"] = subjectmsg["From"] = sender_emailmsg["To"] = receiver_email

# 发送邮件try: # 连接到 SMTP 服务器 with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: server.starttls() # 启用安全加密传输 server.login(sender_email, sender_password) # 登录邮箱 server.send_message(msg) # 发送邮件 print("邮件发送成功!")except Exception as e:print(f"邮件发送失败:{e}")

3.2 代码解析

邮件服务器配置:以 Gmail 为例,SMTP 服务器地址为 smtp.gmail.com,端口为 587。

构建邮件:通过 email.mime.text.MIMEText 创建一个纯文本邮件对象。

发送邮件:使用 smtplib 连接到 SMTP 服务器,登录后调用 send_message() 方法发送邮件。

注意:某些邮箱服务(如 Gmail、QQmail)可能需要开启“应用专用密码”功能,确保可以通过第三方应用发送邮件。

4. 发送带附件的邮件

在实际工作中,我们可能需要发送带附件的邮件,例如报告或表格。我们可以使用 email.mime.multipart 来构建复杂的邮件内容。

4.1 代码示例:发送带附件的邮件

import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBasefrom email import encoders

# 邮件服务器配置SMTP_SERVER = "smtp.gmail.com"SMTP_PORT = 587

# 发送方和接收方sender_email = "your_email@gmail.com"sender_password = "your_password"receiver_email = "recipient_email@gmail.com"

# 创建邮件对象msg = MIMEMultipart()msg["Subject"] = "周报提醒"msg["From"] = sender_emailmsg["To"] = receiver_email

# 添加邮件正文body = "您好,这是本周的周报,请查收附件。"msg.attach(MIMEText(body, "plain"))

# 添加附件filename = "weekly_report.pdf"with open(filename, "rb") as attachment: # 创建附件对象 part = MIMEBase("application", "octet-stream") part.set_payload(attachment.read()) encoders.encode_base64(part) part.add_header( "Content-Disposition", f"attachment; filename={filename}", ) msg.attach(part)

# 发送邮件try: with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: server.starttls() server.login(sender_email, sender_password) server.send_message(msg) print("邮件发送成功!")except Exception as e:print(f"邮件发送失败:{e}")

4.2 代码解析

MIMEMultipart:用于构建包含正文和附件的复杂邮件。

附件处理

使用 MIMEBase 构建附件对象。

使用 encoders.encode_base64 对附件进行编码。

添加 Content-Disposition 头,指定附件的文件名。

5. 批量发送邮件

在某些场景下,例如通知多个员工、发送促销邮件等,我们需要批量发送邮件。以下是一个示例代码:

5.1 代码示例:批量发送邮件

import smtplibfrom email.mime.text import MIMEText

# 邮件服务器配置SMTP_SERVER = "smtp.gmail.com"SMTP_PORT = 587

# 发送方sender_email = "your_email@gmail.com"sender_password = "your_password"

# 接收方列表receivers = ["user1@example.com", "user2@example.com", "user3@example.com"]

# 创建邮件内容subject = "通知"body = "您好,这是自动发送的通知邮件,请查收。"

for receiver in receivers: msg = MIMEText(body, "plain", "utf-8") msg["Subject"] = subject msg["From"] = sender_email msg["To"] = receiver

try: with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: server.starttls() server.login(sender_email, sender_password) server.send_message(msg) print(f"邮件发送成功:{receiver}") except Exception as e:print(f"邮件发送失败:{receiver}, 错误信息:{e}")

5.2 代码解析

循环发送:遍历接收方列表,为每个接收方单独构建邮件并发送。

分离收件人:确保邮件的 To 字段只显示当前收件人,避免暴露其他人的邮箱地址。

6. 实际应用场景

通过 smtplib 和 email,你可以轻松实现以下任务:

定时发送日报/周报:自动生成报告并发送给相关人员。

批量邮件通知:向客户群发促销邮件、向员工发送会议通知。

个性化邮件:根据收件人动态生成个性化内容。

7. 小贴士和注意事项

安全性:不要将密码直接写入代码,建议使用环境变量或密钥管理工具。

频率限制:某些邮箱服务可能对频繁的邮件发送有限制,建议合理控制发送频率。

调试模式:在测试阶段,可以使用 print(msg.as_string()) 查看邮件的内容格式。

使用 smtplib 和 email 库,我们可以轻松实现邮件自动化操作,大幅提升工作效率。无论是定时发送报告还是批量通知用户,Python 都是一个强大的助手。赶快试试,为你的工作节省更多时间吧!

好了,小伙伴们,今天的Python学习之旅就到这里啦!记得动手敲代码复习实操,有问题随时在评论区问毛毛哦。祝大家学习愉快,快速上手Python学习!

关注点赞,好运不断;

(・ω< )

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OkCx2Do9xaLe7EIQL5HUHKCw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券