2015-09-16 37 views
0

我可以使用python(IMAP和郵件模塊)打開郵件,主要是以下建議位置:How can I get an email message's text content using python?提取電子郵件的主體的第一線使用python

但我需要打印只有每電子郵件的主體的第一線 - 如何我可以這樣做嗎?

for part in email_message.walk(): 
    # each part is a either non-multipart, or another multipart message 
    # that contains further parts... Message is organized like a tree 
    if part.get_content_type() == 'text/plain': 
     print part.get_payload() # prints the raw text 

這是我目前必須打印的身體,任何想法如何限制到電子郵件的第一行?

回答

1

有一個在字符串庫準確進行此操作的方法 - splitlines(),這需要不同的行結尾(\ n或\ r \ n)的照顧。 From the doc

例如, 'ABÇ\ n \ NDE FG \ RKL \ r \ n'.splitlines()返回[' AB C」, '', '去FG', 'KL'],

因爲它返回一個數組,所以獲取第一個元素很簡單 - [0]。如果最後一個元素以換行符結尾,它也不會返回一個額外的空字符串,與split('n')不同。

另外,你最好使用get_payload(decode=True),它會照顧base64等你解碼。最後,這裏是你的榜樣更新:

for part in email_message.walk(): 
# each part is a either non-multipart, or another multipart message 
# that contains further parts... Message is organized like a tree 
if part.get_content_type() == 'text/plain': 
    # you may want to break it out in 2 statements for readability 
    print part.get_payload(decode=True).splitlines()[0] # prints the first line 

BTW,文本附件也都是「text/plain的」內容類型和可能弄亂你預期的數據;你可能想跳過那些 - see my post here(自引,xaxax)。

HTH

1

根據文檔get_payload()應該返回一個字符串,所以這應該工作。

for part in email_message.walk(): 
    # each part is a either non-multipart, or another multipart message 
    # that contains further parts... Message is organized like a tree 
    if part.get_content_type() == 'text/plain': 
     lines=part.get_payload().split("\n") 
     print lines[0] 
相關問題