日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

阿里郵箱IMAP場景示例:獲取郵件信息(SELECT、SEARCH和FETCH)

基本流程

image

關鍵動作

  • SELECT

功能:用于選擇一個郵箱,使其成為當前操作的目標。

  • SEARCH

功能:用于搜索滿足特定條件的郵件。

  • FETCH

功能:用于獲取指定郵件的詳細信息。

重要

風險提示:下述代碼在Python 3.11.9進行的測試,用于生產環境之前請務必先做好測試。

Python示例代碼

場景:登錄郵箱,選擇收件箱,搜索未讀郵件,獲取郵件eml原文內容。

# -*- coding: utf-8 -*-
import imaplib
from imapclient import imap_utf7

imap_server = 'imap.qiye.aliyun.com'
username = 'test@example.com'
password = '********'
imap_port = 993

# 連接到IMAP服務器
mail = imaplib.IMAP4_SSL(imap_server, imap_port)
mail.login(username, password)

# 選擇郵箱(例如 "INBOX")
folder_name = imap_utf7.encode('INBOX')  # utf-7編碼,中文編碼
mail.select(folder_name)

# 搜索未讀郵件
status, data = mail.search(None, 'UNSEEN')
if status == 'OK':
    mail_ids = data[0].split()
    for mail_id in mail_ids:
        # 獲取郵件的完整內容
        status, msg_data = mail.fetch(mail_id, '(RFC822)')
        if status == 'OK':
            print(f"郵件ID:{mail_id.decode()}")
            print("郵件內容:")
            print(msg_data[0][1].decode())

# 關閉連接
mail.logout()

參數示例

SELECT注意事項

中文文件夾要utf-7編碼

import imaplib
from imapclient import imap_utf7

imap_server = 'imap.qiye.aliyun.com'
username = 'test@example.com'
password = '******'
port = 993

mail = imaplib.IMAP4_SSL(imap_server, port)
# 登錄
mail.login(username, password)
# 選擇郵箱(例如 "收件箱")
folder_name = imap_utf7.encode('收件箱')  # utf-7編碼,中文編碼
mail.select(folder_name)
print('已選擇郵箱')

常見問題

文件夾編碼錯誤,可以使用list命令查看文件夾名稱,使用imap_utf7進行中文編碼。

imaplib.IMAP4.error: SELECT command error: BAD [b'invalid command or parameters']
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

SEARCH支持的參數

import imaplib
from imapclient import imap_utf7

imap_server = 'imap.qiye.aliyun.com'
username = 'test@example.com'
password = '******'
port = 993

mail = imaplib.IMAP4_SSL(imap_server, port)
# 登錄
mail.login(username, password)
# 選擇郵箱(例如 "INBOX")
folder_name = imap_utf7.encode('INBOX')  # utf-7編碼,中文編碼
mail.select(folder_name)

# search 示例
status, data = mail.search(None, 'SEEN')  # 已讀
# status, data = mail.search(None, 'UNSEEN')  # 未讀
# status, data = mail.search(None, 'ALL')  # 全部
# status, data = mail.search(None, '(SEEN)')  # 另一種寫法
# status, data = mail.search(None, '(SEEN UNSEEN)')  # 支持多條件
# status, data = mail.search(None, 'SEEN', ' UNSEEN')  # 支持多條件,逗號間隔
# status, data = mail.search(None, '1')  # UID
# status, data = mail.search(None, '(1 2)')  # UIDs #支持多UID
# status, data = mail.search(None, 'ON 10-Jan-2024')  # 搜索某一天的郵件
# status, data = mail.search(None, 'SINCE 10-Jan-2024')  # 搜索大于等于某天的郵件
# status, data = mail.search(None, "(SINCE 05-Dec-2023 BEFORE 12-Jan-2024)")  # SINCE代表開始,BEFORE代表結束
#
# status, data = mail.search(None, 'BEFORE', '12-Jan-2024', 'SEEN')  # 搜索某個日期前的郵件,不包含該日期
# status, data = mail.search(None, 'BEFORE', '12-Jan-2024', 'SEEN', 'ON 05-Dec-2023')  # 支持多條件,ON 是搜索某一天的郵件
# status, data = mail.search(None, 'BEFORE 12-Jan-2024', 'SEEN', 'ON 05-Dec-2023')  # 另一種寫法
# status, data = mail.search(None, 'BEFORE 12-Jan-2023 SEEN ON 05-Dec-2022')
# status, data = mail.search(None, "SENTSINCE 26-Mar-2024")  # 自某個日期以來發送的郵件
print(status, data)  # 返回uid信息

運行結果

image

SEARCH不支持的參數示例

# mail.search(None, '(SUBJECT "主題")')
# mail.search(None, 'SUBJECT "測試"'.encode('utf-8'))
# mail.search(None, 'OR FROM "a***@example.net"', 'SUBJECT "測試"'.encode('utf-8'))
# mail.search(None, '(FROM "昵稱")')
# mail.search(None, 'FROM', '"昵稱"')

# mail.search('GB2312', 'FROM "**example**.com"')
# mail.search(None, '(FROM "Doug" SUBJECT "Example message 2")')
# mail.search(None, "FROM", '"昵稱"')
# mail.search([u'SINCE', date(2024, 1, 20)])

FETCH支持的參數

import imaplib
from imapclient import imap_utf7

imap_server = 'imap.qiye.aliyun.com'
username = 'test@example.com'
password = '******'
port = 993

# 連接到IMAP服務器
mail = imaplib.IMAP4_SSL(imap_server, port)
mail.login(username, password)

# 選擇郵箱(例如 "INBOX")
folder_name = imap_utf7.encode('INBOX')  # utf-7編碼,中文編碼
mail.select(folder_name)

# 搜索未讀郵件
status, data = mail.search(None, 'UNSEEN')
if status == 'OK':
    mail_ids = data[0].split()
    for mail_id in mail_ids:
        # 獲取郵件的完整內容
        f_status, msg_data = mail.fetch(mail_id, '(RFC822)')
        # f_status, msg_data = mail.fetch(num, 'UID')  # v_type1= OK data1= [b'1 (UID 12)']
        # f_status, msg_data = mail.fetch(num, 'BODY[]')  # (RFC822)等效
        # f_status, msg_data = mail.fetch(num, '(UID BODY[HEADER])')  # 返回完整的文件頭信息。
        # f_status, msg_data = mail.fetch(num, '(UID BODY[HEADER.FIELDS (Subject)])')  # 在小括號里面可以指定返回的特定字段。如,Subject
        # f_status, msg_data = mail.fetch(num, '(UID BODY[TEXT])')  # 郵件內容,返回的數據是消息部分數據的元組
        # f_status, msg_data = mail.fetch(num, 'FLAGS')[1]  # [b'3 (UID 16 FLAGS (\\Seen))']#獲取UID,需要處理返回數據

        if f_status == 'OK':
            print(f"郵件ID: {mail_id.decode()}")
            print("郵件內容:")
            print(msg_data[0][1].decode())

# 關閉連接
mail.logout()

運行結果

image

FETCH不支持的參數

# status, data = mail.fetch(num, '(UID BODY[HEADER.FIELDS.NOT (Subject)])')
# status, data = mail.fetch('2:3', '(RFC822)')  #范圍

常見問題

出現如下報錯,通常是對應的階段如SEARCH或FETCH中的參數錯誤或不支持,建議參考示例使用支持的命令參數。

imaplib.error: SEARCH command error: BAD [b'invalid command or parameters']
imaplib.error: FETCH command error: BAD [b'invalid command or parameters']