CodeGym /课程 /Python SELF ZH /邮件操作

邮件操作

Python SELF ZH
第 24 级 , 课程 2
可用

8.1 读取邮件

我们已经对网络基础了解得差不多了。现在让我们做一些更有趣的东西——网络上有很多有趣的东西。如何读取和发送邮件呢?

电子邮件是在 50 年前出现的,比第一个浏览器早 20 年。那时,人们使用特定的程序来发送邮件。这对我们意味着什么?意味着邮件操作的标准(协议)简单得要命。

协议 POP3(邮局协议版本 3)用于从邮件服务器获取电子邮件。与 IMAP 不同,POP3 通常将邮件下载到 本地计算机并从服务器删除。在Python中,处理 POP3 可以使用 poplib 库。

注意: 与 POP3 不同,IMAP(Internet 消息访问协议)允许在服务器上存储邮件,并在设备之间同步它们的状态。如果你用多个设备查看邮件,IMAP 更加方便,而 POP3 更适合在单个设备上本地存储邮件。

获取邮件列表的主要步骤:

  • 连接到邮件服务器。
  • 身份验证。
  • 获取邮件列表。
  • 下载和阅读邮件。
  • 断开与服务器的连接。

编写第一个应用程序时,我们需要两个库:poplibemail。如果你没有它们——请安装。你已经知道如何使用 pip 管理器。

重要: 在处理电子邮件时,一定要遵循安全措施。永远不要在代码中明文保存密码。请使用环境变量或受保护的存储来处理凭证。还要确保你的代码不会被公开,以免泄露机密信息。

1. 连接和身份验证:

通过 SSL 连接到邮件服务器,并使用指定的凭据登录邮件箱。


mailbox = poplib.POP3_SSL(pop3_server)
mailbox.user(username)
mailbox.pass_(password)  # 使用 pass_ 防止与 Python 中的关键字 pass 冲突

2. 获取邮件箱信息:

获取邮件箱中的邮件数量。


num_messages = len(mailbox.list()[1])
print(f"邮件数量: {num_messages}")

3. 下载和阅读邮件:

下载和阅读最新的邮件。


# 示例:读取最新邮件
if num_messages > 0:
    response, lines, octets = mailbox.retr(num_messages)
    message = '\n'.join(line.decode('utf-8') for line in lines)
    print("最新邮件内容:")
    print(message)

对于解析和显示内容,可以使用一个专门的库 — email。它可以解码邮件的内容,附件,包括邮件头和正文。

这样我们的邮件客户端的最终版本就完成了。


import poplib

# 登录凭证
username = 'your_email@example.com'
password = 'your_password'
            
# 连接到 Gmail 邮件服务器
pop3_server = 'pop.gmail.com'
mailbox = poplib.POP3_SSL(pop3_server, 995)
            
# 登录邮件箱
mailbox.user(username)
mailbox.pass_(password)  # 使用 pass_ 防止与 Python 中的关键字 pass 冲突
            
# 获取邮件箱信息
num_messages = len(mailbox.list()[1])
print(f"邮件数量: {num_messages}")
            
# 示例:读取最新邮件
if num_messages > 0:
    response, lines, octets = mailbox.retr(num_messages)
    message = '\n'.join(line.decode('utf-8') for line in lines)
    print("最新邮件内容:")
    print(message)
            
# 关闭连接
mailbox.quit()

你可以尝试阅读你的邮件,只需要指定正确的 POP3 服务器。例如,在上面的例子中,我指定了 Gmail 服务器的数据。如果你使用其他邮件服务器,那么这些信息在网络上很容易找到。

8.2 发送邮件

要通过 SMTP(简单邮件传输协议)发送电子邮件,在 Python 中可以使用内置的 smtplib 库。该模块提供了建立与 SMTP 服务器 的连接、身份验证和发送邮件的函数。

发送邮件的主要步骤:

  • 连接到 SMTP 服务器
  • 身份验证。
  • 构建消息。
  • 发送消息。
  • 关闭连接。

1. 连接到 SMTP 服务器

连接到 SMTP 服务器 并通过 TLS 切换到安全连接。


server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()  # 安全连接

2. 身份验证:

使用凭据登录 SMTP 服务器


server.login(username, password)

3. 构建简单的字符串格式的消息:


message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"

4. 发送消息:


server.sendmail(from_addr, to_addr, message)

5. 关闭连接:


server.quit()

看起来比上次简单了不少,这让人高兴。

整个带错误处理的代码如下所示:


import smtplib

# 登录凭证
smtp_server = 'smtp.gmail.com'
smtp_port = 587
username = 'your_email@gmail.com'
password = 'your_app_password'  # 使用应用密码
            
# 发件人和收件人地址
from_addr = 'your_email@gmail.com'
to_addr = 'recipient@example.com'
            
# 邮件主题和正文
subject = '邮件主题'
body = '这是邮件正文。'
            
# 构建字符串格式的消息
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
            
try:
    # 连接到 SMTP 服务器
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()  # 安全连接
            
    # 身份验证
    server.login(username, password)
            
    # 发送消息
    server.sendmail(from_addr, to_addr, message)
    print("邮件成功发送!")
except Exception as e:
    print(f"发送邮件时出错: {e}")
finally:
    # 关闭连接
    server.quit()

代码的大部分内容都是注释和服务器设置,实际上可以在 5 行中发送邮件。试试看——这很有趣。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION