IMAP 命令 UID FETCH:参数太长

Posted

技术标签:

【中文标题】IMAP 命令 UID FETCH:参数太长【英文标题】:IMAP command UID FETCH: Too long argument 【发布时间】:2022-01-24 03:30:57 【问题描述】:

我正在将 imaplib (imap4) 与 Python 3.7.0 一起使用,我正在尝试获取一个大文件夹并且我正在获取

FETCH command error: BAD [b'Error in IMAP command UID FETCH: Too long argument (0.001 + 0.122 + 0.122 secs).']

我使用的代码如下

    def run(self, verifyQueue):
        config = json.load(open("config.json", "r+"))
        client = IMAPClient(host=config.get('imapHost'))
        while True:
            try:
                client.login(config.get('imapUsername'), config.get('imapPassword'))
                client.select_folder(config.get('imapFolder'))
                self.log('Loaded')
                while True:
                    try:
                        client.idle()
                        responses = client.idle_check(timeout=30)
                        if responses:
                            client.idle_done()
                            messages = client.search("UNSEEN")
                            for uid, message_data in client.fetch(messages, "RFC822").items():
                                emailMSG = email.message_from_bytes(message_data[b"RFC822"])

这对于小型文件夹非常有效,但这个文件夹有几千封电子邮件

【问题讨论】:

【参考方案1】:

拆分消息似乎已经解决了问题

messages = client.search("UNSEEN")
for i in range(0, len(messages), 500):
    for uid, message_data in client.fetch(messages[i:i + 500], "RFC822").items():

【讨论】:

以上是关于IMAP 命令 UID FETCH:参数太长的主要内容,如果未能解决你的问题,请参考以下文章

使用 Javascript fetch 发送的 GraphQL 引用参数

在 python 中解析 IMAP 响应

使用 find 命令删除一组目录,而不会遇到太长的参数列表

rm,cp,mv命令的参数列表太长错误

imap_setflag_full 似乎啥都不做?

用sed -i参数列表替换所有文件太长[关闭]