---
title: 列出邮件并下载附件
description: 分页读取邮件，列出附件并下载到受控目录。
sidebar_label: 列出邮件并下载附件
sidebar_position: 4
---

# 列出邮件并下载附件

下载流程由邮件、附件和文件流三个层级组成。每个 ID 都属于指定邮箱上下文，不要跨邮箱复用。

## 调用顺序

1. 调用[查询文件夹内的邮件列表](/api/alimailpb-alimail-mailagent-open-mail-service-list-messages)，按 `nextCursor` 读取完整结果。
2. 选择目标邮件 ID，调用[列出邮件附件](/api/alimailpb-alimail-mailagent-open-mail-service-list-attachments)。
3. 对目标附件调用[创建附件下载会话](/api/alimailpb-alimail-mailagent-open-mail-service-create-attachment-download-session)。
4. 将响应内容写入受控目录，并校验文件名、大小和内容类型。

## Python 示例

```python runtimeApiEndpoint
from pathlib import Path
import requests

API_BASE = "https://alimail-cn.aliyuncs.com"


def download_attachment(
    access_token: str,
    mailbox: str,
    message_id: str,
    attachment: dict,
    output_dir: Path,
) -> Path:
    headers = {"Authorization": f"Bearer {access_token}"}
    response = requests.get(
        f"{API_BASE}/v2/users/{mailbox}/messages/{message_id}/attachments/{attachment['id']}/$value",
        headers=headers,
        timeout=60,
    )
    response.raise_for_status()

    safe_name = Path(attachment["name"]).name
    target = output_dir / safe_name
    target.write_bytes(response.content)
    return target
```

生产任务应限制下载目录和总大小，拒绝包含路径穿越字符的文件名，并避免在日志中记录邮件正文或临时下载地址。

参考：[原始示例](https://help.aliyun.com/zh/document_detail/2856396.html)。
