2009-04-21 88 views
6

我嘗試通過IMAP將電子郵件草稿存儲到在MS Exchange上運行的文件夾中。一切正常,但密件抄送收件人不會顯示在服務器上存儲的草稿郵件中。如果我使用MS Outlook發送電子郵件,則密件抄送收件人也不會收到該電子郵件。如果我在將它存儲在服務器上後用Python讀回消息,我可以在草稿中看到Bcc。Python:如何通過IMAP將密件抄送收件人的草稿電子郵件存儲到Exchange Server?

下面的Python代碼重現此行爲:

import imaplib 
import time 
from email.MIMEMultipart import MIMEMultipart 
from email.MIMEText import MIMEText 

message = MIMEMultipart() 
message['Subject'] = 'Test Draft' 
message['From'] = '[email protected]' 
message['to'] = '[email protected]' 
message['cc'] = '[email protected]' 
message['bcc'] = '[email protected]' 
message.attach(MIMEText('This is a test.\n')) 

server= imaplib.IMAP4('the.ser.ver.ip') 
server.login('test', 'test') 
server.append("Drafts" 
       ,'\Draft' 
       ,imaplib.Time2Internaldate(time.time()) 
       ,str(message)) 
server.logout() 

如果我運行此代碼,草案被存儲在Exchange服務器上的文件夾Draft。但是如果我用MS Outlook查看草稿,它不包括bcc收件人(message['bcc'] = '[email protected]')。 Message,to,from,cc好的,沒有錯誤。

如果我從Exchange文件夾下載了已經包含密件抄送的草稿,我還可以看到密件抄送。只有上傳不適合我。

非常感謝任何幫助。謝謝。順便說一句,MAPI不是一種選擇。

更新:謝謝。 X-Receiver沒有爲我工作。至於在Outlook中播放IMAP文件夾,我得到了一個有趣的結果。如果我通過Outlook中的IMAP文件夾訪問草稿,則會看到密件抄送。但是,如果我通過MAPI文件夾訪問它,我不會看到它。會玩一點點。

結論:謝謝你的意見。其實,代碼工作得很好。看到下面的答案,我發現。

回答

6

其實,代碼工作得很好。它會創建包含密件抄送在內的所有正確標題的正確郵件。

郵件客戶端如何顯示密件抄送?

mail client(例如,通過IMAP或MAPI的Python或MS Outlook)決定是否以及如何顯示密件抄送標題。 Outlook例如不顯示來自IMAP文件夾的密件抄送標題。這是一種隱藏密送收件人之前未從郵件中刪除密件的功能(標準中不清楚是否允許一個密送收件人查看所有其他密送收件人,請參閱Wikipedia)。

誰在發送電子郵件時處理密件抄送?

現在假設我們已經在郵件客戶端中起草了郵件並將其存儲在IMAP或MAPI文件夾中。提供IMAP/MAPI文件夾的服務器使草稿消息保持不變。在發送郵件時,bcc-header發生什麼事情取決於實現,可能取決於郵件客戶端和mail transfer agent(例如MS Exchange服務器)。簡而言之,人們不同意郵件客戶端或郵件傳輸代理是否負責刪除密件抄送標題。然而,似乎大多數開發人員認爲這是郵件客戶端與郵件傳輸代理沒有接觸郵件(例如MS Exchange,MS SMTP,Exim,OpenWave)的業務。在這種情況下,郵件傳輸代理將電子郵件發送給SMTP通信的RCPT TO:中定義的收件人,否則將保持電子郵件不變。然而,其他一些郵件傳輸代理從郵件中剝離了bcc頭(例如sendmail,Lotus Notes)。在Exim郵件列表中可以找到非常詳細的討論,從here開始。

對於MS Outlook和MS Exchange,MS Outlook從不發送密件抄送(但爲每個密件抄送收件人發送單個電子郵件),MS Exchange不會觸摸電子郵件標題,但會發送完整電子郵件(可能包括密件抄送收件人)發送給RCPT TO:中定義的收件人。

結論

我不明白,有對BCC沒有保證的行爲,而且通常是客戶端處理BCC。我將重寫我的Python代碼以循環訪問密件抄送收件人,併爲每個密件抄送收件人生成一封電子郵件。

1

它可能是這樣的設計。畢竟,密件抄送的要點是收件人彼此隱藏。

我知道您並未發送電子郵件,只是將其存儲。但我的猜測是,當郵件是IMAP時,Exchange的內部規則就會啓動。附加到文件夾,導致bcc字段被刪除。

顯然,使用Outlook將郵件保存到文件夾時,密件抄送字段爲,而不是剝離。但我認爲Outlook使用一些內部機制(MAPI?)與Exchange進行通信。

以上所有僅僅是猜測。

好玩的東西,你可以嘗試:

  • 在一個空的Outlook/MAPI配置文件,創建一個IMAP帳戶。將其設置爲在Exchange服務器上存儲草稿和已發送郵件。
  • 查看使用IMAP的outlook是否可以正確保存bcc的草稿。

我嘗試了上述使用通過IMAP連接到Exchange的Evolution電子郵件客戶端。使用Outlook(以正常方式連接),然後我查看了草稿和已發送項目。密件抄送字段在這兩個地方都失蹤了。

我相信這支持我的理論。

1

嘗試設置BCC頭的這個替代版本:當你把它

X-Receiver: [email protected] 

交易所尤其會將此像BCC。但我敢打賭,當你通過IMAP書寫時,它不會剝離它。您可以通過複製此行來包含多個BCC收件人。

這是一個完全的黑客,顯然。

相關問題