簡體   English   中英

Python imaplib無法通過地址搜索

[英]Python imaplib can't search by from address

我正在嘗試查找與特定發件人地址匹配的郵件。 我已經看了這個答案,但對我來說不起作用。

以下是相關代碼:

import imaplib

conn = imaplib.IMAP4_SSL(IMAPserver)
conn.login(IMAPuserName, IMAPpassword)
retVal, data = conn.select("INBOX")
    if retVal != "OK":
        <PRINT SOME ERROR MESSAGE>
        sys.exit(1)

所有這些工作。 以下是搜索命令無法使用的一些變體:

retVal, data = conn.search(None, 'UNSEEN HEADER FROM "foo@example.com"')

retVal, data = conn.search(None, 'UNSEEN FROM "foo@example.com"')

retVal, data = conn.search(None, 'FROM "foo@example.com"')

retVal, data = conn.search(None, 'HEADER FROM "foo@example.com"')

所有這些都會導致如下錯誤:

    imaplib.error: SEARCH command error: BAD ['Error in IMAP command SEARCH: 
Unexpected string as search key: FROM "foo@example.com"']

我已經提到了IMAP v4 RFC的相關部分,但是我無法弄清楚我到底在做什么錯。 任何幫助將不勝感激。

我設法從管理IMAP服務器的人員那里獲取信息。 這是服務器問題,與代碼無關。

有問題的IMAP服務器是Dovecot的自定義版本。 它實際上索引所有郵箱,以加快搜索等速度。 在這種情況下,我郵箱的索引已損壞。 重新索引解決了該問題。

如文檔中的示例所示, IMAP.search()期望搜索參數作為單獨的位置參數,而不是單個字符串:

conn.search(None, 'UNSEEN', 'HEADER', 'FROM', 'foo@example.com')
conn.search(None, 'UNSEEN', 'FROM', 'foo@example.com')
conn.search(None, 'FROM', 'foo@example.com')
conn.search(None, 'HEADER', 'FROM', 'foo@example.com')

如果您傳遞單個參數,則imaplib會將其作為單個帶引號的參數傳遞給SEARCH命令。

同樣,您不能依賴於此,因為僅對Python 2.x imaplib Python 3.x imaplib不會為您提供報價,並且該特定錯誤仍處於打開狀態

如文檔所述,一種解決方法是將參數“加引號”為列表:

conn.search(None, '(UNSEEN HEADER FROM foo@example.com)')
conn.search(None, '(UNSEEN FROM foo@example.com)')
conn.search(None, '(FROM foo@example.com)')
conn.search(None, '(HEADER FROM foo@example.com)')

但正如@Max所指出的,某些IMAP服務器不支持此功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM