Python知识点:如何使用Python进行邮件自动化(smtplib、email)

使用 Python 进行邮件自动化可以通过 smtplibemail 库来完成。这两个库共同提供了发送电子邮件的功能,其中:

  • smtplib:用于通过 SMTP(Simple Mail Transfer Protocol)协议发送电子邮件。
  • email :用于构建电子邮件内容,包括文本HTML附件等。

以下是如何使用这两个库发送电子邮件的详细步骤和代码示例。

1. 准备工作

在开始之前,需要确认以下事项:

  • 你有一个支持 SMTP 的邮件服务提供商,例如 Gmail、Outlook 等。
  • 你可能需要为某些服务生成应用专用密码(如 Gmail),因为一些服务不支持直接使用账户密码登录。

2. 使用 smtplibemail 发送基本文本邮件

基本步骤
  • 连接 SMTP 服务器
  • 登录邮箱账户
  • 构建邮件内容
  • 发送邮件
代码示例:发送简单文本邮件
python 复制代码
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 邮件的基本信息
sender_email = "your_email@example.com"  # 发件人邮箱
receiver_email = "receiver@example.com"  # 收件人邮箱
password = "your_password"  # 发件人邮箱密码或应用专用密码
subject = "Test Email"
body = "This is a test email sent using Python."

# 创建邮件对象
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject

# 邮件正文内容
message.attach(MIMEText(body, "plain"))

# 连接到邮件服务器并发送邮件
try:
    # SMTP 服务器设置 (以 Gmail 为例,使用 TLS)
    smtp_server = "smtp.gmail.com"
    port = 587  # 对于 TLS

    # 连接到服务器
    server = smtplib.SMTP(smtp_server, port)
    server.starttls()  # 安全连接

    # 登录邮箱
    server.login(sender_email, password)

    # 发送邮件
    server.sendmail(sender_email, receiver_email, message.as_string())
    print("邮件发送成功")
except Exception as e:
    print(f"发送邮件时出现错误: {e}")
finally:
    server.quit()  # 断开服务器连接

3. 发送带有 HTML 内容的邮件

如果想要发送带有 HTML 内容的邮件,可以将邮件内容设置为 HTML 格式。

代码示例:发送 HTML 邮件
python 复制代码
html_content = """
<html>
    <body>
        <h1>This is an HTML Email!</h1>
        <p>This email was sent using Python with <b>HTML</b> formatting.</p>
    </body>
</html>
"""

# 替换文本内容为 HTML 内容
message.attach(MIMEText(html_content, "html"))

# 发送邮件的过程与之前相同

4. 发送带附件的邮件

如果需要发送附件,例如 PDF、图片等,可以使用 email.mime 中的 MIMEBase 类来处理附件。

代码示例:发送带附件的邮件
python 复制代码
import os
from email.mime.base import MIMEBase
from email import encoders

# 邮件基本信息设置同之前

# 添加附件
filename = "document.pdf"  # 文件路径
with open(filename, "rb") as attachment:
    # 设置 MIME 类型并添加附件
    part = MIMEBase("application", "octet-stream")
    part.set_payload(attachment.read())

# 对文件内容进行编码
encoders.encode_base64(part)

# 添加附件到邮件中
part.add_header(
    "Content-Disposition",
    f"attachment; filename= {os.path.basename(filename)}",
)
message.attach(part)

# 发送邮件的过程同之前相同

5. 通过 SSL 发送邮件

有些邮件服务需要使用 SSL 来加密连接。smtplib 提供了对 SSL 的支持。

代码示例:通过 SSL 发送邮件
python 复制代码
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

sender_email = "your_email@example.com"
receiver_email = "receiver@example.com"
password = "your_password"
subject = "Test Email with SSL"
body = "This is a test email sent using Python with SSL."

# 创建邮件对象
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject
message.attach(MIMEText(body, "plain"))

# 连接到邮件服务器并发送邮件
try:
    smtp_server = "smtp.gmail.com"
    port = 465  # 对于 SSL

    # 使用 SMTP_SSL 创建安全连接
    server = smtplib.SMTP_SSL(smtp_server, port)
    
    # 登录邮箱
    server.login(sender_email, password)

    # 发送邮件
    server.sendmail(sender_email, receiver_email, message.as_string())
    print("邮件发送成功")
except Exception as e:
    print(f"发送邮件时出现错误: {e}")
finally:
    server.quit()  # 断开服务器连接

6. 总结

通过 Python 使用 smtplibemail 可以很方便地进行邮件自动化操作。可以根据需要执行以下任务:

  • 发送简单文本邮件:适合通知、提醒等场景。
  • 发送 HTML 邮件:适合需要复杂排版、插入图片或超链接的邮件。
  • 发送带附件的邮件:适合发送文档、报告、图片等。
  • 通过 SSL/TLS:确保邮件传输过程的安全性。

Python 提供了灵活的邮件处理方案,可以根据需求自定义邮件内容和附件,轻松实现邮件自动化功能。

相关推荐
努力的家伙是不讨厌的8 分钟前
解析json导出csv或者直接入库
开发语言·python·json
理想不理想v12 分钟前
‌Vue 3相比Vue 2的主要改进‌?
前端·javascript·vue.js·面试
云空31 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
凤枭香1 小时前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
sszmvb12341 小时前
测试开发 | 电商业务性能测试: Jmeter 参数化功能实现注册登录的数据驱动
jmeter·面试·职场和发展
测试杂货铺1 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
王佑辉1 小时前
【redis】redis缓存和数据库保证一致性的方案
redis·面试
艾派森1 小时前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
真忒修斯之船1 小时前
大模型分布式训练并行技术(三)流水线并行
面试·llm·aigc
ZL不懂前端2 小时前
Content Security Policy (CSP)
前端·javascript·面试