阿里邮箱IMAP命令集介绍

阿里邮箱IMAP命令集

  • CAPABILITY 获取服务器支持的功能列表。

  • LOGIN 用户登录,提供用户名和密码。

  • SELECT 选择一个邮箱,使其成为当前操作的目标。

  • NOOP 不执行任何操作,常用于保持连接活跃。

  • CREATE 创建一个新的邮箱。

  • DELETE 删除一个邮箱。

  • RENAME 重命名一个邮箱。

  • SUBSCRIBE 订阅一个邮箱,使其出现在用户的邮箱列表中。

  • UNSUBSCRIBE 取消订阅一个邮箱。

  • LIST 列出邮箱或子邮箱。

  • LSUB 列出已订阅的邮箱。

  • STATUS 获取指定邮箱的状态信息,如消息数量、未读消息数量等。

  • APPEND 将消息追加到指定的邮箱中。

  • FETCH 检索消息或消息的一部分。

  • STORE 修改消息的标志。

  • COPY 复制消息到另一个邮箱。

  • SEARCH 搜索满足特定条件的消息。

  • UID 使用唯一标识符(UID)执行命令,如 UID FETCH 和 UID STORE。

  • LOGOUT 断开与服务器的连接。

Python代码示例

重要

风险提示:下述代码在Python 3.11.9进行的测试,用于生产环境之前请务必先做好测试。

# -*- coding: utf-8 -*-
import imaplib
import sys

# 配置 IMAP 服务器
imap_server = 'imap.qiye.aliyun.com'
username = 'xxxxxx'
password = 'xxxxxx'
port = 993


def test_imap_commands():
    try:
        # 连接到 IMAP 服务器
        # mail = imaplib.IMAP4(imap_server, 143)  # 使用非加密连接
        mail = imaplib.IMAP4_SSL(imap_server, port)  # 使用 SSL 加密连接
        print(f"Connected to {imap_server}")

        # 发送 CAPABILITY 命令,获取服务器支持的功能
        response = mail.capability()
        print(f"CAPABILITY Response: {response}")
        print(response)

        # 登录到服务器
        response = mail.login(username, password)
        print(f"Login Response: {response}")

        # 选择 INBOX 邮箱
        response = mail.select('INBOX')
        print(f"SELECT Response: {response}")

        # 测试 NOOP 命令,用于保持连接活跃
        response = mail.noop()
        print(f"NOOP Response: {response}")

        # 测试 CREATE 命令,创建一个新文件夹
        response = mail.create('test_folder')
        print(f"CREATE Response: {response}")

        # 测试 RENAME 命令,重命名文件夹
        response = mail.rename('test_folder', 'new_folder')
        print(f"RENAME Response: {response}")

        # 测试 DELETE 命令,删除一个文件夹
        response = mail.delete('new_folder')
        print(f"DELETE Response: {response}")

        # 测试 SUBSCRIBE 命令,订阅一个文件夹
        response = mail.subscribe('test_folder')
        print(f"SUBSCRIBE Response: {response}")

        # 测试 UNSUBSCRIBE 命令,取消订阅一个文件夹
        response = mail.unsubscribe('test_folder')
        print(f"UNSUBSCRIBE Response: {response}")

        # 测试 LIST 命令,列出所有文件夹
        response = mail.list()
        print(f"LIST Response: {response}")

        # 测试 LSUB 命令,列出已订阅的文件夹
        response = mail.lsub()
        print(f"LSUB Response: {response}")

        # 测试 STATUS 命令,获取邮箱的状态信息
        response = mail.status('INBOX', '(MESSAGES UNSEEN)')
        print(f"STATUS Response: {response}")

        # 测试 APPEND 命令,向指定邮箱追加邮件
        message = b'Subject: Test Email\r\n\r\nThis is a test email.\r\n'
        response = mail.append('INBOX', None, None, message)
        print(f"APPEND Response: {response}")

        # 测试 FETCH 命令,获取邮件内容
        response = mail.fetch('1', '(BODY[HEADER.FIELDS (SUBJECT)])')
        print(f"FETCH Response: {response}")

        # 测试 STORE 命令,修改邮件标志
        response = mail.store('1', '+FLAGS', '\\Seen')  # 修改为已读。其他:\\Deleted 彻底删除
        print(f"STORE Response: {response}")

        # 测试 COPY 命令,移动邮件到另一个文件夹,不是复制
        response = mail.copy('2', 'folderA/11/111')
        print(f"COPY Response: {response}")

        # 测试 UID COPY 命令,使用唯一标识符移动邮件,不是复制
        response = mail.uid('COPY', '2', 'folderA')
        print(f"UID COPY Response: {response}")

        # 测试 SEARCH 命令,搜索符合条件的邮件
        response = mail.search(None, 'ALL')
        print(f"SEARCH Response: {response}")

        # 测试 UID 命令,使用唯一标识符获取邮件内容
        response = mail.uid('FETCH', '1', '(BODY[HEADER.FIELDS (SUBJECT)])')
        print(f"UID FETCH Response: {response}")

        # 断开连接
        response = mail.logout()
        print(f"LOGOUT Response: {response}")

    except imaplib.IMAP4.error as e:
        print(f"IMAP Error: {e}")
        sys.exit(1)


# 测试 IMAP 服务器命令
test_imap_commands()

运行结果

image

CAPABILITY(服务器支持的功能列表)

IMAP4rev1:

表示服务器支持IMAP4rev1协议,这是IMAP4的一个修订版本,提供了更多的功能和改进。

IDLE:

表示服务器支持IDLE命令,允许客户端在不轮询的情况下接收新邮件的通知。

XLIST:

表示服务器支持XLIST扩展,用于列出邮箱的扩展信息。

UIDPLUS:

表示服务器支持UIDPLUS扩展,提供了对UID操作的更多功能,如COPY命令。

ID:

表示服务器支持ID命令,允许客户端获取服务器的标识信息。

SASL-IR:

表示服务器支持SASL初始响应,可以在认证过程中发送初始响应数据。

AUTH=XOAUTH:

表示服务器支持XOAUTH认证机制,这是一种OAuth 1.0a的认证方式。

AUTH=XOAUTH2:

表示服务器支持XOAUTH2认证机制,这是一种OAuth 2.0的认证方式。

AUTH=EXTERNAL:

表示服务器支持EXTERNAL认证机制,通常用于客户端已经通过其他方式(如SSL/TLS客户端证书)进行了身份验证。