2009-10-26 53 views
3

我有一封電子郵件,我正在閱讀Python電子郵件庫,我需要修改附件。電子郵件消息類具有「附加」方法,但沒有任何類似「分離」的東西。我如何從多部分消息中刪除附件?如果可能的話,我想要做到這一點,而不是從頭開始重新創建消息。Python的電子郵件庫 - 如何從現有的消息中刪除附件?

基本上我想:

  1. 裝入電子郵件
  2. 刪除的MIME附件
  3. 添加新的附件

回答

2

set_payload()可能有所幫助。

set_payload(payload[, charset])

設置整個消息對象的有效載荷的有效載荷。確保有效載荷不變量是客戶的責任。

快速互動例如:

>>> from email import mime,message 
>>> m1 = message.Message() 
>>> t1=email.MIMEText.MIMEText('t1\r\n') 
>>> print t1.as_string() 
Content-Type: text/plain; charset="us-ascii" 
MIME-Version: 1.0 
Content-Transfer-Encoding: 7bit 

t1 

>>> m1.attach(t1) 
>>> m1.is_multipart() 
True 
>>> m1.get_payload() 
[<email.mime.text.MIMEText instance at 0x00F585A8>] 
>>> t2=email.MIMEText.MIMEText('t2\r\n') 
>>> m1.set_payload([t2]) 
>>> print m1.get_payload()[0].as_string() 
Content-Type: text/plain; charset="us-ascii" 
MIME-Version: 1.0 
Content-Transfer-Encoding: 7bit 

t2 

>>> 
3

好了,從我的經驗,在上下文你工作,一切都是Message的對象。信息,它的部分,附件,一切。因此,要完成你想做什麼,你需要

  1. 使用Parser API解析消息(這將讓你的根Message對象)
  2. 走結構,確定你需要什麼,你不要(使用Message實例的方法 - .walk()) - 記住,一切都是Message
  3. 將你需要附加的任何東西附加到你已經提取的部分,你很好去。

要重申的是,你正在處理的是,本質上,一棵樹,其中有.is_multipart()Message對象== true的節點,並與.is_multipart()Message對象== false的終端節點(它們的有效載荷是一個字符串,而不是一堆Message對象)。

2

我已經想通了,做事情是這樣的:

  1. 有效載荷設置爲空列表與set_payload
  2. 創建的有效載荷,並附着於該消息。
相關問題