# 读取电子邮件，pop3

> 原文： [https://pythonspot.com/read-email-pop3/](https://pythonspot.com/read-email-pop3/)

在本教程中，您将学习如何使用`poplib`模块来**接收电子邮件**。 邮件服务器需要支持 **pop3**，但是大多数邮件服务器都支持。邮局协议（POP3）仅用于接收邮件，发送时需要 SMTP 协议。

![pop3-email-server](img/b7a7593691fc70c549881f1570ecc3b1.jpg)

简化邮件服务器

## 元数据

每封电子邮件将包含许多变量，但是这些是最重要的变量：

| 特征 | 描述 |
| --- | --- |
| 消息 ID | 唯一标识符 |
| 从 | 电子邮件来自哪里？ |
| 至 | 电子邮件发送到哪里了？ |
| 日期 | 日期 |
| 学科 | 电子邮件主题。 |

## 读取电子邮件示例

您可以使用邮局协议（协议）直接从邮件服务器请求消息。您不必担心内部协议，因为您可以使用`poplib`模块。

使用以下方法连接服务器并进行身份验证：

```py

# connect to server
server = poplib.POP3(SERVER)

# login
server.user(USER)
server.pass_(PASSWORD)

```

下面的程序从服务器获取 10 封电子邮件，包括邮件头

```py

import poplib
import string, random
import StringIO, rfc822

def readMail():
    SERVER = "YOUR MAIL SERVER"
    USER = "YOUR USERNAME [email protected]COM"
    PASSWORD = "YOUR PASSWORD"

    # connect to server
    server = poplib.POP3(SERVER)

    # login
    server.user(USER)
    server.pass_(PASSWORD)

    # list items on server
    resp, items, octets = server.list()

    for i in range(0,10):
        id, size = string.split(items[i])
        resp, text, octets = server.retr(id)

        text = string.join(text, "\n")
        file = StringIO.StringIO(text)

        message = rfc822.Message(file)

        for k, v in message.items():
            print k, "=", v

readMail()

```