2010-03-11 10 views
11

मैं एक ऐसा एप्लिकेशन बना रहा हूं जहां मुझे MailMessage (System.Net.mail.MailMessage) बनाने के लिए बाध्य किया गया है और इसे डिस्क पर .msg एक्सटेंशन के रूप में सहेजने के लिए बाध्य नहीं है .emlSystem.Net.mail.MailMessage को .msg फ़ाइल के रूप में सहेजें

public static void Save(MailMessage Message, string FileName) 
    { 
     Assembly assembly = typeof(SmtpClient).Assembly; 
     Type _mailWriterType = 
      assembly.GetType("System.Net.Mail.MailWriter"); 

     using (FileStream _fileStream = 
       new FileStream(FileName, FileMode.Create)) 
     { 
      // Get reflection info for MailWriter contructor 
      ConstructorInfo _mailWriterContructor = 
       _mailWriterType.GetConstructor(
        BindingFlags.Instance | BindingFlags.NonPublic, 
        null, 
        new Type[] { typeof(Stream) }, 
        null); 

      // Construct MailWriter object with our FileStream 
      object _mailWriter = 
       _mailWriterContructor.Invoke(new object[] { _fileStream }); 

      // Get reflection info for Send() method on MailMessage 
      MethodInfo _sendMethod = 
       typeof(MailMessage).GetMethod(
        "Send", 
        BindingFlags.Instance | BindingFlags.NonPublic); 

      // Call method passing in MailWriter 
      _sendMethod.Invoke(
       Message, 
       BindingFlags.Instance | BindingFlags.NonPublic, 
       null, 
       new object[] { _mailWriter, true }, 
       null); 

      // Finally get reflection info for Close() method on our MailWriter 
      MethodInfo _closeMethod = 
       _mailWriter.GetType().GetMethod(
        "Close", 
        BindingFlags.Instance | BindingFlags.NonPublic); 

      // Call close method 
      _closeMethod.Invoke(
       _mailWriter, 
       BindingFlags.Instance | BindingFlags.NonPublic, 
       null, 
       new object[] { }, 
       null); 
     } 
    } 

लेकिन उन्हें बचा लिया msg फ़ाइल नहीं खुलती है और नीचे त्रुटि है:: "फ़ाइल xyz नहीं खोल सकता

नीचे विधि मैं msg फ़ाइल के रूप में एक MailMessage को बचाने के लिए उपयोग कर रहा हूँ है .msg। फ़ाइल फ़ाइल मौजूद नहीं हो सकती है, आपको इसे खोलने की अनुमति नहीं हो सकती है या यह किसी अन्य प्रोग्राम द्वारा खुली हो सकती है .... "

मेरा प्रश्न है: msgstr "System.Net.mail.MailMessage को फाइल के रूप में कैसे सहेजने के लिए?

उत्तर

4

Here रयान किसी भी प्रयास के दौरान इसे करने का एक आसान और शानदार तरीका सुझाता है।

You can actually configure the SmtpClient to send emails to the file system instead of the network. You can do this programmatically using the following code:

SmtpClient client = new SmtpClient("mysmtphost"); 
client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; 
client.PickupDirectoryLocation = @"C:\somedirectory"; 
client.Send(message); 

आप भी इस तरह अपने आवेदन विन्यास फाइल में इसे सेट करने से:

<configuration> 
    <system.net> 
     <mailSettings> 
      <smtp deliveryMethod="SpecifiedPickupDirectory"> 
       <specifiedPickupDirectory pickupDirectoryLocation="C:\somedirectory" /> 
      </smtp> 
     </mailSettings> 
    </system.net> 
</configuration> 
+2

हां, यह सच है, लेकिन MailMessage को .eml फ़ाइल के रूप में सहेजा गया है, मैं इसे .msg फ़ाइल के रूप में सहेजना चाहता हूं – Gaby

+1

यह क्यों डाउनवॉटिंग? यह "जवाब" नहीं है, लेकिन यह एक अच्छा सुझाव है ... –

+0

गैबी, क्या आपके पास इसका जवाब है? – zipi

2

आप Outlook msg फ़ाइल की बात कर रहे हैं, तो यह .NET में मूल रूप से नहीं किया जा सकता ।

आउटलुक .msg फ़ाइल एक कंपाउंड दस्तावेज़ है, इसलिए, आपको इसे उस प्रारूप में सहेजने की आवश्यकता होगी, और सभी उपयुक्त गुणों को उनके सटीक स्थानों में रखना सुनिश्चित करें।

आपको या तो खुद को लिखना होगा, किसी तृतीय पक्ष या संभावित Outlook इंटरऑप का उपयोग करना होगा।

क्षमा करें,

डेव

0

Outlook द्वारा दिए गए त्रुटि संदेश .msg एक्सटेंशन के कारण है। मैं MailMessage ऑब्जेक्ट को डिस्क पर सहेजने के लिए एक ही विधि का उपयोग कर रहा हूं और पाया है कि फ़ाइल केवल के विस्तार के साथ Outlook में दिखाई देगी .eml

2

चेक इस छोटे से उदाहरण आउटलुक इंटरॉप पुस्तकालय Creating an Outlook Message File with C# का उपयोग करता है। यह बिल्कुल ठीक नहीं है कि आप किसके लिए पूछ रहे हैं लेकिन प्रतिलिपि मान एक से दूसरे के लिए एक तरीका है - मैन्युअल रूप से।

+2

क्लाइंट के लिए Outlook इंटरऑप उपयोगी है -साइड सेटिंग्स जहां कार्यालय स्थापित है, लेकिन सर्वर-साइड परिदृश्य में लगभग उपयोग नहीं किया जा सकता है। – saille

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