2009-10-26 6 views
3

첨부 파일을 수정해야하는 Python 전자 메일 라이브러리로 전자 메일을 읽었습니다. 이메일 메시지 클래스에는 "attach"메소드가 있지만 "detach"와 같은 것은 없습니다. 멀티 파트 메시지에서 첨부 파일을 제거하려면 어떻게해야합니까? 가능하다면 처음부터 메시지를 재생성하지 않고이 작업을 수행하려고합니다.Python email lib - 기존 메시지에서 첨부 파일을 제거하는 방법은 무엇입니까?

는 기본적으로 내가 원하는 :

  1. 로드 이메일
  2. 제거 마임 첨부
  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 개체입니다. 메시지, 부품, 첨부 파일, 모든 것. 그래서, 당신이 원하는 것을 달성하기 위해, 당신은 Parser API를 사용하여 메시지를 구문 분석

  1. 필요 당신을 당신이 필요 결정하고 무엇을,
  2. 이 구조를 걸어 (이것은 당신에게 루트 Message 객체를 얻을 것이다) Message 인스턴스의 메서드 (- .walk())를 사용하지 마십시오. - 모든 것이 Message임을 기억하십시오.
  3. 압축을 푼 부분에 부착해야하는 것은 무엇이든 첨부하고 갈 수 있습니다.

반복하려면, 당신이 작업하는 것입니다으로, 본질적으로, 나무, 어디 .is_multipart()와 Message 객체 == 사실은 == False입니다 최종 노드 노드와 .is_multipart()와 Message 개체 (그들의 페이로드는 문자열이고, Message 개체가 아닙니다.)

2

나는 그것이 어떻게 알아 냈어요 방법 :

  1. set_payload
  2. 로 빈 목록에 페이로드를 설정
  3. 는 페이로드를 생성하고 메시지에 첨부합니다.
관련 문제