2014-10-12 4 views
12

के साथ पार्सिंग आउटलुक .msg फ़ाइलों को चारों ओर देखा और संतोषजनक उत्तर नहीं मिला। क्या किसी को पता है कि पायथन के साथ दृष्टिकोण से .msg फ़ाइलों को कैसे पार्स करना है?पार्सन

मैंने किसी भी भाग्य के साथ mimetools और email.parser का उपयोग करने का प्रयास किया है। मदद की बहुत सराहना की जाएगी!

उत्तर

12

यह मेरे लिए काम करता है:

import win32com.client 
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") 
msg = outlook.OpenSharedItem(r"C:\test_msg.msg") 

print msg.SenderName 
print msg.SenderEmailAddress 
print msg.SentOn 
print msg.To 
print msg.CC 
print msg.BCC 
print msg.Subject 
print msg.Body 

count_attachments = msg.Attachments.Count 
if count_attachments > 0: 
    for item in range(count_attachments): 
     print msg.Attachments.Item(item + 1).Filename 

del outlook, msg 
+4

यह ध्यान रखना महत्वपूर्ण है कि OpenSharedItem विधि एक पूर्ण पथ की अपेक्षा करता है अन्यथा आपको कोई त्रुटि मिलती है। – smartexpert

+1

मुझे एन्कोडिंग के साथ समस्याएं प्रतीत होती हैं। आप इसे कैसे हल कर सकते हैं? – firko

3

हालांकि इस एक पुराने धागा है, मुझे आशा है कि इस जानकारी को कोई है जो क्या धागा विषय बिल्कुल का कहना है के लिए एक समाधान की तलाश में है मदद कर सकता है। मैं दृढ़ता से mattgwwalker in github के समाधान का उपयोग करने की सलाह देता हूं, जिसके लिए बाहरी रूप से स्थापित होने के लिए OleFileIO_PL module की आवश्यकता होती है।

0

मैं अजगर ईमेल मॉड्यूल की कोशिश की है और कभी कभी कि सफलतापूर्वक संदेश फ़ाइल को पार्स नहीं है।

तो, इस मामले में, यदि आप केवल टेक्स्ट या एचटीएमएल के बाद हैं, तो निम्न कोड मेरे लिए काम करता है।

start_text = "<html>" 
end_text = "</html>" 
def parse_msg(msg_file,start_text,end_text): 
    with open(msg_file) as f: 
    b=f.read() 
    return b[b.find(start_text):b.find(end_text)+len(end_text)] 

print parse_msg(path_to_msg_file,start_text,end_text)