2012-06-26 75 views
1

我正在寫一個能夠通過IMAP在Python中備份和恢復Gmail中的電子郵件的工具。 在某些情況下,從Gmail備份的電子郵件包含奇怪的字符:^ @然後無法由Gmail IMAP重新導入。IMAP服務器無法接收的電子郵件中的奇怪字符

Delivered-To: [email protected] 
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: <[email protected]> 
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: <[email protected]> 
Date: Mon, 23 Aug 2010 17:58:48 +0200 
From: Foo Bar <[email protected]> 
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: [email protected] <x> 
Subject: The subject 
Content-Type: text/plain; charset=ISO-8859-15; format=flowed 
Content-Transfer-Encoding: 8bit 
X-Provags-ID: xxxxxxxxxxx= 
Envelope-To: [email protected] 


    Hello All, 

blah blah blah 


^@ 

最後他們是這個特殊字符。有時會出現在中間的其他電子郵件中。 當我將電子郵件存儲到磁盤(eml格式)時,我只需保存並恢復它即可。

編碼看起來是正確的。

這個角色是什麼? 當我將電子郵件存儲在eml中時,我是否做錯了什麼?

一些指導將不勝感激。

謝謝。

+0

'^ @'是一個空字符。不知道它如何到達那裏。你能粘貼你的代碼嗎?參考:http://www.robelle.com/smugbook/ascii.html – ZnArK

+0

電子郵件是8位,「內容傳輸編碼:8位」。並非所有系統/軟件都能處理8位郵件。正如@ZnArK所說,'^ @'是NULL的常見表示。 – MattH

+0

我認爲它是在電子郵件最初創建時插入的。然後,Gmail Imap不想接受它。我有一個問題,但。有IMAP通信和SSL。你認爲SSL層可以添加它嗎?代碼非常簡單,我通過python imaplib獲取電子郵件並將其保存在文件中。該文件以'wb'打開。如果您有任何想法,請告知我。謝謝 – zoobert

回答

2

簡短的回答:您可以從電子郵件的正文之前,送他們回谷歌剝離空字符**

更長的答案:

(根據 RFC 822

舊郵件被允許有空字符。新電子郵件(根據RFC 2822,大約在2003年)不允許有空字符。注意RFC 2822讀取:「與早期標準的區別...刪除了ASCII 0(空)。」

Gmail完全有可能通過SMTP接收822樣式的電子郵件(這是電子郵件首先到達您的收件箱的方式),但僅通過IMAP接收2822樣式的電子郵件(這就是爲什麼您無法通過IMAP放回)。

**注意:不要盲目刪除電子郵件中包含的MIME文檔中的空值。 RFC 2822「指定消息由US-ASCII範圍爲1到127的字符組成。還有其他文檔,特別是MIME文檔系列[RFC2045,RFC2046,RFC2047,RFC2048,RFC2049],它們擴展了[RFC 2822]以允許該範圍之外的值。「

相關問題