Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python imaplib可以';t按发件人地址搜索_Python_Python 2.7_Imaplib - Fatal编程技术网

Python imaplib可以';t按发件人地址搜索

Python imaplib可以';t按发件人地址搜索,python,python-2.7,imaplib,Python,Python 2.7,Imaplib,我正试图找到与特定发件人地址匹配的邮件。我看过了,但对我不起作用 以下是相关代码: 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

我正试图找到与特定发件人地址匹配的邮件。我看过了,但对我不起作用

以下是相关代码:

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)
所有这些都会导致如下错误:

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

我已经参考了手册的相关章节,但我不知道我到底做错了什么。如有任何帮助,我们将不胜感激。

如文档中的示例所示,搜索参数应为单独的位置参数,而不是单个字符串:

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
命令

但是,您也不能依赖于此,因为引用只发生在Python2.x
imaplib
上。Python3.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服务器不支持此功能。

如文档中的示例所示,搜索参数应为单个位置参数,而不是单个字符串:

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
命令

但是,您也不能依赖于此,因为引用只发生在Python2.x
imaplib
上。Python3.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服务器不支持这一点。

我设法从管理IMAP服务器的家伙那里获得了信息。这是一个服务器问题,与代码无关


所讨论的IMAP服务器是Dovecot的定制版本。它实际上是所有邮箱,以使搜索等更快。在这种情况下,我邮箱的索引已损坏。重新编制索引修复了该问题。

我设法从管理IMAP服务器的人员那里获得了信息。这是一个服务器问题,与代码无关


所讨论的IMAP服务器是Dovecot的定制版本。它实际上是所有邮箱,以使搜索等更快。在这种情况下,我邮箱的索引已损坏。重新编制索引修复了该问题。

我认为您的服务器可能有严重/未实现的搜索。一些非品牌服务器不支持字符串搜索。(例如,mail.ru似乎就是其中之一)。您正在尝试连接到哪个服务和/或服务器软件?我觉得这些命令没问题。谢谢,@Max。我确实想到了这种可能性,但这有点难以验证。这是一个私人公司的电子邮件服务器,我没有太多的控制或洞察。我想你的服务器可能有很差/未实现的搜索。一些非品牌服务器不支持字符串搜索。(例如,mail.ru似乎就是其中之一)。您正在尝试连接到哪个服务和/或服务器软件?我觉得这些命令没问题。谢谢,@Max。我确实想到了这种可能性,但这有点难以验证。这是一个私人公司的电子邮件服务器,我没有太多的控制权或洞察力。你的第一组命令相当于他的。imaplib只是将不同的子字符串与空格连接起来。第二组可能会混淆某些服务器,这些服务器不希望()在顶级。@Max我可以非常肯定地确认至少Cyrus IMAP在
IMAP.search(无,'FROM'localpart@domain“)
,同时它很乐意接受
imap.search(无,'FROM','localpart@domain)
。如果不传递单独的参数,则会将整个字符串作为一个带引号的参数传递给IMAP服务器(通过
IMAP.\u quote()
)。啊,有趣的是,我使用了3.0 imaplib(和forks),这是我在我的OP:conn.search(无,'FROM','foo@example.com"""那不吐,,但它匹配邮箱中的每封邮件,而不考虑实际的发件人标头。这是上面@Max建议的服务器端搜索实现问题吗?服务器功能列表是否有助于诊断问题?*功能IMAP4rev1 LITERAL+SASL-IR LOGIN-REFERRALS ID启用空闲排序排序=显示线程=引用线程=引用线程=ORDEREDSUBJECT MULTIAPPEND取消选择子命名空间UIDPLUS列表扩展I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES CONTEXT=搜索列表-状态特殊-USE QUOTA您的第一组命令是等效的给他的。imaplib只是将不同的子字符串与空格连接起来。第二组可能会混淆某些服务器,这些服务器不希望()在顶级。@Max我可以非常肯定地确认至少Cyrus IMAP在
IMAP.search(无,'FROM'localpart@domain“)
,同时它很乐意接受
imap.search(无,'FROM','localpart@domain)
。如果不传递单独的参数,则会将整个字符串作为一个带引号的参数传递给IMAP服务器(通过
IMAP.\u quote()
)。啊,有趣的是,我使用了3.0 imaplib(和forks),这是我在我的OP:conn.search(无,'FROM','foo@example.com"""那不吐,,但它匹配邮箱中的每封邮件,而不考虑实际的发件人标头。这是上面@Max建议的服务器端搜索实现问题吗?服务器功能列表是否有助于诊断问题?*功能IMAP4rev1 LITERAL+SASL-IR登录-REFERRALS ID启用空闲排序排序=显示线程=引用线程=引用线程=ORDEREDSUBJECT多重附加取消选择子命名空间UIDPLUS列表扩展I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT上下文内搜索资源=搜索列表-状态特殊使用配额