【问题标题】:python imaplib UID command error: BAD [b'Could not parse command']python imaplib UID 命令错误:BAD [b'Could not parse command']
【发布时间】:2018-09-21 19:49:30
【问题描述】:

我正在尝试使用复制命令复制邮件。

imapper.copy(email.uid, 'TEST')

email.uid = 本例中的 uid 1069

TEST = 邮件所在的地图

这是我的复制功能:

def copy(self, uid, to):
    #typ, content = self._mailer.copy(bytes(uid), to)
    print (uid)
    typ, content = self._mailer.uid('copy', bytes(1069), 'TEST')
    if typ == 'OK':
        mail = _parse_email(content, include_raw=include_raw)
        return mail
    else:
        raise Exception("Could not copy email.")

由于我遇到此错误,我决定不使用变量并对其进行硬编码,直到它工作为止,然后用变量替换它。

typ, content = self._mailer.uid('copy', bytes(1069), 'TEST')

这会返回错误:

UID 命令错误:BAD [b'Could not parse command']

我已添加 bytes() 否则我会收到此错误:

TypeError: can't concat int to bytes

【问题讨论】:

    标签: python imaplib


    【解决方案1】:

    它需要一个字符串。使用 str(1069) 或 '1069',而不是整数。尽管它们是数字,但协议将它们视为字符串,而不是数字。

    bytes(1069) 在 python 中创建一个包含 1069 个零的字节数组,因此您发送了一堆空值。

    【讨论】:

    • 嗯,这确实是答案。我也用这个答案更新了我的存储库,谢谢!
    【解决方案2】:

    好的,这就是我的解决方案:

    我已将字节 UID 添加到邮件对象并更改了复制功能以使用此字节 UID。这解决了所有问题

    我还用我的实现制作了 easyimap 包装器的一个分支

    所以有了一个新功能,可以将邮件复制到另一个邮箱

    https://github.com/UGxMvH/easyimap

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 2011-08-13
      • 2021-02-28
      • 2020-09-26
      • 2019-02-21
      • 2021-12-14
      相关资源
      最近更新 更多