2

我正在编写一个工具,该工具能够通过 python 中的 IMAP 备份和恢复 Gmail 中的电子邮件。在某些情况下,从 Gmail 备份的电子邮件包含奇怪的字符:^@,然后 Gmail IMAP 无法重新摄取这些字符。

Delivered-To: xxxxx@lxxxxxx
Received: by 1x.xx.xx.xx with SMTP id jjjjjjjj;
        Tue, 14 Jun 2011 16:56:26 -0700 (PDT)
Received: by x.x.x.x with SMTP id xxxx.xxx;
        Tue, 14 Jun 2011 16:56:16 -0700 (PDT)
Return-Path: <foo.bar@email.com>
Delivery-Date: Mon, 23 Aug 2010 17:58:56 +0200
Received: from xxxxx (xxxxx [x.x.x.x])
    by xxxx (node=xxx) with ESMTP (xxx)
    id xxx ; Mon, 23 Aug 2010 17:58:56 +0200
Received: from [x] (x)
    by x (x) with x (x)
    id x; Mon, 23 Aug 2010 17:58:50 +0200
Message-ID: <x@foo.com>
Date: Mon, 23 Aug 2010 17:58:48 +0200
From: Foo Bar <foo.bar@email.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.8) Gecko/20100802             Thunderbird/3.1.2
MIME-Version: 1.0
To: bar.foo@email.com <x>
Subject: The subject
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 8bit
X-Provags-ID: xxxxxxxxxxx=
Envelope-To: foo.bar@email.com


  Hello All,

blah blah blah


^@

最后他们是这个特殊的角色。有时它会出现在中间的其他电子邮件中。当我将电子邮件存储在磁盘上(eml 格式)时,我只是保存并恢复它。

编码似乎正确。

这个角色是什么?当我将电子邮件存储在 eml 中时,我做错了什么吗?

一些指导将不胜感激。

谢谢。

4

1 回答 1

3

简短回答:您可以先从电子邮件正文中删除空字符,然后再将它们发送回 Google。**

更长的答案:

旧电子邮件(根据RFC 822)被允许包含空字符。新电子邮件(根据RFC 2822,大约 2003 年)不允许包含空字符。注意 RFC 2822 写道:“与早期标准的差异...... ASCII 0 (null) 已删除。”

Gmail 完全有可能通过 SMTP 接收 822 样式的电子邮件(这就是电子邮件首先到达您的收件箱的方式),但仅通过 IMAP 接收 2822 样式的电子邮件(这就是为什么您不能通过 IMAP 将其放回的原因)。

** 注意:不要盲目地从电子邮件中包含的 MIME 文档中去除空值。RFC 2822 “指定消息由 US-ASCII 范围 1 到 127 中的字符组成。还有其他文档,特别是 MIME 文档系列 [RFC2045、RFC2046、RFC2047、RFC2048、RFC2049],它们扩展了 [RFC 2822]允许超出该范围的值。”

于 2012-10-14T05:06:24.423 回答