Python SMTP邮件发送:详解及案例147


Python 作为一门功能强大的编程语言,拥有丰富的库来支持各种任务,其中就包括发送电子邮件。利用 Python 的 `smtplib` 库,我们可以轻松地编写程序来发送简单的文本邮件、HTML 格式邮件,甚至添加附件。本文将详细介绍如何利用 Python 的 `smtplib` 库进行 SMTP 邮件编程,并提供一些实用案例。

一、SMTP协议基础知识

SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用于在邮件服务器之间传输电子邮件。当我们使用邮箱发送邮件时,实际上就是客户端程序通过 SMTP 协议将邮件发送到邮件服务器,然后邮件服务器再将邮件转发到收件人的邮件服务器。 SMTP 协议使用 TCP 端口 25 (或其他端口,如 587、465)。理解 SMTP 协议的工作流程有助于我们更好地理解 `smtplib` 库的使用。

二、Python `smtplib` 库的使用

Python 的 `smtplib` 库提供了与 SMTP 服务器交互的接口。 以下是一个发送简单文本邮件的基本示例:```python
import smtplib
from import MIMEText
# 发送者邮箱地址
sender_email = 'your_email@'
# 发送者邮箱密码 (通常是授权码,而非登录密码)
sender_password = 'your_password'
# 收件人邮箱地址
receiver_email = 'receiver_email@'
# 邮件主题
subject = 'Python SMTP邮件测试'
# 邮件正文
body = '这是一封使用Python发送的测试邮件'
# 创建 MIMEText 对象
msg = MIMEText(body, 'plain', 'utf-8')
msg['Subject'] = subject
msg['From'] = sender_email
msg['To'] = receiver_email
# 连接 SMTP 服务器
try:
with smtplib.SMTP_SSL('', 465) as smtp: # 使用SSL连接,端口通常为465
(sender_email, sender_password)
smtp.send_message(msg)
print('邮件发送成功!')
except Exception as e:
print(f'邮件发送失败: {e}')
```

在这个例子中:
`smtplib.SMTP_SSL()` 用于建立 SSL 加密的连接,端口通常是 465。如果没有使用SSL,可以使用 `()` 并使用端口 25 或 587,并自行处理SSL。
`()` 用于登录 SMTP 服务器。
`smtp.send_message()` 用于发送邮件。
请将 `your_email@`、`your_password`、`receiver_email@` 和 `` 替换成你的实际邮箱地址、密码(通常是授权码)、收件人邮箱地址和 SMTP 服务器地址。
不同的邮箱服务商的 SMTP 服务器地址和端口号可能不同,请参考你的邮箱服务商的帮助文档。


三、发送HTML格式邮件

发送 HTML 格式邮件需要使用 `` 和 `` 模块。```python
import smtplib
from import MIMEMultipart
from import MIMEText
# ... (其他代码同前例) ...
msg = MIMEMultipart('alternative')
msg['Subject'] = subject
msg['From'] = sender_email
msg['To'] = receiver_email
# 创建HTML正文
html_body = """


这是一个段落。

"""
html_part = MIMEText(html_body, 'html', 'utf-8')
(html_part)
# ... (连接 SMTP 服务器并发送邮件的代码同前例) ...
```

这段代码创建了一个 `MIMEMultipart` 对象,并将 HTML 内容作为 `MIMEText` 对象附加到其中。收件人将收到一个格式化的 HTML 邮件。

四、添加附件

添加附件需要使用 `` 模块。```python
import smtplib
from import MIMEMultipart
from import MIMEText
from import MIMEApplication
# ... (其他代码同前例) ...
# 添加附件
with open('', 'rb') as f:
attachment = MIMEApplication(())
attachment.add_header('Content-Disposition', 'attachment', filename='')
(attachment)
# ... (连接 SMTP 服务器并发送邮件的代码同前例) ...
```

这段代码读取一个文件,将其作为附件添加到邮件中。`Content-Disposition` 头信息指定了附件的处理方式。

五、错误处理和安全考虑

在实际应用中,需要添加更完善的错误处理机制,例如捕获 `` 等异常。同时,应该注意保护你的邮箱密码,避免将其直接硬编码在程序中,建议使用环境变量或更安全的密钥管理方式。

六、总结

本文详细介绍了如何使用 Python 的 `smtplib` 库发送邮件,包括发送简单文本邮件、HTML 格式邮件以及添加附件。 记住选择合适的 SMTP 服务器地址和端口号,并注意安全地处理你的邮箱密码。 通过灵活运用 `smtplib` 库,你可以构建各种邮件自动化任务,例如定时发送邮件、批量发送邮件等。

2025-04-25


上一篇:Python网络编程利器:深入浅出常用库及应用场景

下一篇:Python网络编程并发:提升效率的利器