【问题标题】:How to copy a message from one imap server to another imap server using Python imaplib?如何使用 Python imaplib 将消息从一个 imap 服务器复制到另一个 imap 服务器?
【发布时间】:2011-05-09 21:54:33
【问题描述】:

我想将邮件从一台 IMAP 服务器复制到另一台 IMAP 服务器。我不想更改任何消息数据。我正在使用 python imaplib。

这是我试过的代码:

typ, data = connection1.uid('FETCH', uid, 'RFC822')
connection2.uid('APPEND', None, data[0][1])

但这引发了一个异常:

imaplib.error: UID 命令错误:BAD ['"Delivered-To: niels@domain.com']

所以我认为参数 (data[0][1]) 的格式不正确。

data[0][1] 的内容如下所示:

投递至:niels@domain.com\r\n接收:由 10.216.207.222 使用 SMTP id n27cs38120weo;\r\n2010 年 11 月 12 日星期五 09:43:47 -0800 (PST)\r\n接收:由10.200.19.19,SMTP ID 为 y19mr234526eba.52.12894526694;\r\n2010 年 11 月 12 日星期五 09:43:46 -0800 (PST)\r\n返回路径:somename@domain.com\r\n接收:来自 dub0-omc1- s20.dub03.hotmail.com (dub0-omc1-s20.dub03.hotmail.com [157.55.0.220])\r\n ......

我该如何解决这个问题?

更新:在 Wodin 和 Avadhesh 的帮助下,我现在可以附加消息,但是如何获取刚刚附加消息的 UID?

【问题讨论】:

    标签: python imap imaplib rfc822


    【解决方案1】:

    你可以试试下面的代码:

    typ, data = connection1.uid('FETCH', uid, 'RFC822')
    import email
    msg_str = email.message_from_string(data[0][1])
    msg_create = connection2.append(str(dest_fold_code) , flags, '', str(msg_str))
    

    如果看到电子邮件,标志将是 '(\Seen)',如果没有看到电子邮件,标志将是 ''。

    【讨论】:

      【解决方案2】:

      你试过了吗:

      connection2.append(mailbox, flags, date_time, message)
          Append message to named mailbox.
      

      RFC3501 显示 UID 命令的语法如下:

      uid             = "UID" SP (copy / fetch / search / store)
      

      即似乎没有“UID APPEND”命令。

      【讨论】:

      • connection2.append(mailbox, '','', data[0][1]) 有效。我想我将不得不使用单独的 IMAP 命令来获取 uid。 Tnx。
      • 如何获取刚刚附加消息的 uid?
      【解决方案3】:

      解决了!

      先复制邮件用

      typ, data = connection1.uid('FETCH', uid, 'RFC822')
      connection2.append('Inbox', '', '', data[0][1])
      

      然后像这样从复制的消息中获取唯一的消息ID

      from email.parser import Parser
      parser = Parser()
      msg = parser.parsestr(data[0][1])
      

      然后像这样使用message-id在目标邮箱中查找新邮件

      typ, uid = connection2.uid('SEARCH', None, 'Header', 'Message-Id', msg['message-ID'])
      

      【讨论】:

        猜你喜欢
        • 2011-10-25
        • 2012-05-20
        • 1970-01-01
        • 2018-04-27
        • 2014-02-13
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 2015-09-21
        相关资源
        最近更新 更多