使用imaplib搜索{UTF-8编码的主题}

问题描述

我有一些工作代码来提取邮件正文,并且我想用非ASCII字符串过滤主题。其他论坛建议使用.uid类来这样做,但是这种行为对我而言并不合逻辑。

当前代码:

import imaplib
import email

username = secret
password = secret

imap = imaplib.IMAP4_SSL("imap.gmail.com")

status,messages = imap.select("INBOX",readonly=True)

res,msg = imap.search(None,'HEADER Subject "string to be encoded with UTF-8"')

建议的代码:

import imaplib
import email

username = secret
password = secret

imap = imaplib.IMAP4_SSL("imap.gmail.com")

status,readonly=True)

imap.literal = u"string to be encoded with UTF-8".encode('utf-8')
res,msg = imap.uid('SEARCH','CHARSET','UTF-8','SUBJECT')

suggested code可以正常工作,但是返回的数组(msg[0])包含超出范围的邮箱索引。相反,当我使用.search类时,只要我搜索ASCII字符串(这里不接受UTF-8和非UTF-8编码的字符串),就会返回有效的索引。因此,我不太了解.uid的行为和逻辑。如果有人可以帮助我,我将不胜感激。

如何使用UTF-8字符串过滤主题?

解决方法

我设法通过以下建议的方法解决了该情况,即使用推荐的方法使用.uid而不是.search

imap = imaplib.IMAP4_SSL("server_to_connect_to")
imap.login(username,password)

status,messages = imap.select("INBOX",readonly=True)
imap.literal  = u'"Subject to be searched"'.encode('utf-8')
res,uid = imap.uid('SEARCH','CHARSET','UTF-8','SUBJECT')
messages = msg[0].decode('utf-8').split()

for uid in messages:
    res,msg = imap.uid('fetch',uid,'(RFC822)')
    #parsing logic

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...