2011-05-17 9 views
6

मेरे पास एक सी # एप्लिकेशन है जो .msg फ़ाइलों को पढ़ता है और शरीर और अनुलग्नकों को निकालता है। लेकिन जब मैं एक .eml फ़ाइल लोड करने का प्रयास करता हूं तो एप्लिकेशन क्रैश हो जाता है। मैं इस तरह की फाइलें लोड कर रहा हूं:सी # में Outlook MAPI का उपयोग कर .eml फ़ाइलों को कैसे खोलें?

MailItem mailItem = (MailItem)outlookApp.CreateItemFromTemplate(msgFileName); 
mailItem.SaveAs(fullFilename, OlSaveAsType.olHTML); // save body in html format 
for(int i = 0; i < mailItem.Attachments.Count; i++) 
    mailItem.Attachments[i].SaveAsFile(filename); // save attachments 

यह .msg फ़ाइलों के साथ ठीक काम करता है, लेकिन यह .eml फ़ाइलों के लिए काम नहीं करता है। मुझे समझ में नहीं आ रहा है कि क्यों .eml फ़ाइलें काम नहीं करती हैं, क्योंकि मैं Outlook 2010 में .eml फ़ाइलों को खोल सकता हूं।

मैं Outlook Primary Interop Assembly का उपयोग कर .eml फ़ाइलों को कैसे लोड कर सकता हूं?

+1

क्यों आप .eml फ़ाइल लोड करने के लिए MAPI का उपयोग करने की आवश्यकता होगी? चूंकि .eml फ़ाइल केवल एक MIME संदेश है, इसलिए इसे स्वयं पार्स करना बहुत कठिन नहीं होना चाहिए (एक MIME पार्सर के लिए खोज कोडप्लेक्स)। क्या इस संबंध में एमएपीआई से आपको कुछ विशिष्ट आवश्यकता है? –

+0

ऐसा इसलिए है क्योंकि मेरे पास एक ऐसा एप्लिकेशन है जो एमएपीआई के साथ .msg फ़ाइलों को विभाजित करता है और मैंने सोचा कि मुझे बदलाव करने की आवश्यकता नहीं है और मेरी .eml फ़ाइलों को खोलने की तरह ही मैं इसे नए कोड लिखने के बिना .msg फ़ाइलों के साथ करता हूं। – CubaLibre

उत्तर

8

इस नमूना कोड Easily Retrieve Email Information from .EML Files

प्रयास करें संदेश ( RDOMail) का उपयोग कर सकते
+1

संशोधित संस्करण उपलब्ध है: आसानी से ईएमएल फाइलों से ईमेल जानकारी पुनर्प्राप्त करें - संशोधित http: //www.codeproject।कॉम/आलेख/76607/आसानी से पुनर्प्राप्त-ईमेल-सूचना-से-ईएमएल-फाइल-आर – danglund

+0

@ डांगलंड संशोधित संस्करण अधिक जटिल लग रहा था, 3 की बजाय 3 बड़े पैमाने पर .cs फ़ाइलें थीं (कुछ अप्रासंगिक सामग्री शामिल हैं), और ' मेरे लिए भी संकलित नहीं है। – MGOwen

5

CreateItemFromTemplate केवल एमएसजी/ओएफटी फाइलों के साथ काम करता है। EML फ़ॉट फ़ाइलें आप या तो अपने कोड में स्पष्ट रूप से फ़ाइल को पार्स या (जैसे मुक्ति के रूप में) एक तीसरी पार्टी पुस्तकालय का उपयोग करने की आवश्यकता होगी:

निम्न कोड एक एमएसजी फ़ाइल बनाएं और उसे Redemption का उपयोग करते हुए एक EML फ़ाइल आयात करेगा (RDOSession वस्तु):

set Session = CreateObject("Redemption.RDOSession") 
    Session.MAPIOBJECT = outlookApp.Session.MAPIOBJECT 
    set Msg = Session.CreateMessageFromMsgFile("C:\Temp\temp.msg") 
    Msg.Import "C:\Temp\test.eml", 1024 
    Msg.Save 
    MsgBox Msg.Subject 

फिर आप तक पहुँचने के लिए यह विभिन्न गुणों (अधीन रहते हुए, शरीर, आदि)

+0

क्या रिडेम्प्शन के बिना एएमएल आयात करना संभव है? – CubaLibre

+0

निश्चित रूप से, यदि आप ईएमएल फ़ाइल को पार्स करते हैं और एक समय में विभिन्न MailItem ऑब्जेक्ट गुण सेट करते हैं। –

+0

हाय मैं इस कोड का उपयोग करना चाहता हूं लेकिन मेरे पास .msg नहीं है। मुझे एक एएमएल आयात करने के लिए नकली .msg की आवश्यकता है? मैं सीधे एएमएल कैसे आयात/खोल सकता हूं? – bobzer

0

किसी .eml फ़ाइल से MailItem बनाने के लिए आप निम्न दो चरणों का उपयोग कर सकते हैं: सबसे पहले आप एक Outlook प्रक्रिया उदाहरण खोलते हैं और फिर आप Outlook API के साथ MailItem बनाते हैं।

string file = @"C:\TestEML\EmlMail.eml"; 
    System.Diagnostics.Process.Start(file); 
    Outlook.Application POfficeApp = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application"); // note that it returns an exception if Outlook is not running 
    Outlook.MailItem POfficeItem = (Outlook.MailItem)POfficeApp.ActiveInspector().CurrentItem; // now pOfficeItem is the COM object that represents your .eml file 
+0

इससे ईएमएल फ़ाइल प्रदर्शित की जाएगी, जो शायद ओपी चाहता है। –

0

हालांकि आउटलुक EML फ़ाइलें खोल सकते हैं, वहाँ केवल VBA के साथ यह प्रोग्राम के करने के लिए कोई रास्ता नहीं है। तो मैंने इस वीबीए मैक्रो को बनाया जो कुछ फ़ोल्डर के माध्यम से लूप करता है और SHELL EXEC का उपयोग करके प्रत्येक ईएमएल फ़ाइल खोलता है। आउटलुक ईएमएल फ़ाइल खोलने तक कुछ मिलीसेकंड ले सकते हैं, इसलिए VBA सक्रिय इंस्पेक्टर में कुछ खुला होने तक प्रतीक्षा करता है। अंत में, यह ईमेल कुछ चुने हुए फ़ोल्डर में कॉपी किया गया है, और (सफलता के मामले में) मूल ईएमएल फ़ाइल हटा दी गई है।

मेरा पूरा जवाब (और कोड) यहाँ देखें: https://stackoverflow.com/a/33761441/3606250

संबंधित मुद्दे