2012-07-04 12 views
12

मैं here वर्णित Outlook के माध्यम से ईमेल भेजना चाहता हूं। यह तब तक ठीक काम करता है जब तक कि मैंने पहले ही Outlook खोला है। तो उदाहरण के लिए यदि Outlook कम हो गया है और मैं अपना कोड निष्पादित करता हूं, तो मैं एक ईमेल भेज सकता हूं। लेकिन अगर आउटलुक बंद कर दिया है, तो मैं एक अपवाद प्राप्त करें:यदि Outlook खुला है तो Outlook के माध्यम से केवल ईमेल भेज सकता है

{System.Runtime.InteropServices.COMException (0x80004004): Operation aborted (Exception from HRESULT: 0x80004004 (E_ABORT)) 
    at Microsoft.Office.Interop.Outlook._MailItem.get_Recipients() 
    at OutlookExample.Form1.btnSendEmail_Click(Object sender, EventArgs e) in C:\Users\abc\Documents\Visual Studio 2008\Projects\OutlookExample\OutlookExample\Form1.cs:line 28} 

यहाँ कोड है:

using Outlook = Microsoft.Office.Interop.Outlook; 

... 

private void btnSendEmail_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     Outlook.Application oApp = new Outlook.Application(); 
     Outlook.MailItem oMsg = Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); 
      oMsg.HTMLBody = "Hello, here is your message!"; 
      oMsg.Subject = "This is a test message"; 
      Outlook.Recipients oRecips = (Outlook.Recipients)oMsg.Recipients; 
      Outlook.Recipient oRecip = (Outlook.Recipient)oRecips.Add("[email protected]"); 
      oRecip.Resolve(); 
      oMsg.Send(); 
      oRecip = null; 
      oRecips = null; 
      oMsg = null; 
      oApp = null; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 

क्यों नहीं करता है यह काम करता है?

संपादित करें:

  app = new Microsoft.Office.Interop.Outlook.Application(); 
      Microsoft.Office.Interop.Outlook.NameSpace ns = app.GetNamespace("MAPI"); 
      f = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox); 
      Thread.Sleep(5000); // a bit of startup grace time. 

अगर दृष्टिकोण खुला था यह इसे इस्तेमाल करता है, अगर नहीं है अपने इसे खोला: यहाँ समाधान

using Outlook = Microsoft.Office.Interop.Outlook; 

... 

private void btnSendEmail_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     Outlook.Application oApp = new Outlook.Application(); 

     // These 3 lines solved the problem 
     Outlook.NameSpace ns = oApp.GetNamespace("MAPI"); 
     Outlook.MAPIFolder f = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); 
     System.Threading.Thread.Sleep(5000); // test 

     Outlook.MailItem oMsg = Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); 
      oMsg.HTMLBody = "Hello, here is your message!"; 
      oMsg.Subject = "This is a test message"; 
      Outlook.Recipients oRecips = (Outlook.Recipients)oMsg.Recipients; 
      Outlook.Recipient oRecip = (Outlook.Recipient)oRecips.Add("[email protected]"); 
      oRecip.Resolve(); 
      oMsg.Send(); 
      oRecip = null; 
      oRecips = null; 
      oMsg = null; 
      oApp = null; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 
+5

Outlook का उपयोग न करें। इसके बजाय, System.Net.Mail का उपयोग करें। – SLaks

+0

अच्छा सवाल। निश्चित रूप से यह अभी तक लॉग इन नहीं है? – BugFinder

+0

स्लाक्स, मेरी इच्छा है। दुर्भाग्य से मैं वीबी 6 कोड बनाए रख रहा हूं और सी # में समस्या को दोहराया। –

उत्तर

12

निम्नलिखित कोड मज़बूती से मेरे लिए महीने के लिए काम किया है । बेशक, यदि आपके दृष्टिकोण के लिए आपको लॉगिन करने की आवश्यकता है, तो आपका कोड उस के लिए अनुमति नहीं देगा। कुछ सिस्टम आपके लिए ऑटो लॉगिन करना मुश्किल बनाते हैं।

+0

यह काम किया, धन्यवाद। –

10

मैं विचार 5 सेकंड के लिए Thread.Sleep उपयोग करने के लिए पसंद नहीं आया, तो मैं एक और समाधान, वह मेरे लिए काम किया मिल गया है:

आपको बस इंस्पेक्टर वस्तु पाने के लिए नव निर्मित है

Outlook.Application oApp = new Outlook.Application(); 
Outlook.MailItem oMsg = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); 
Outlook.Inspector oInspector = oMsg.GetInspector; 

उत्तर Google groups में प्रकाशित हुआ था Outlook 2007 के लिए मूल रूप से (लेकिन यह आउटलुक 2010 के साथ मेरे लिए काम किया)

+0

धन्यवाद। बढ़िया काम :) –

+0

हालांकि इंस्पेक्टर ऑब्जेक्ट कैसे मदद करता है? इसका कहीं भी उपयोग नहीं किया जा रहा है या क्या मुझे कुछ याद आ रहा है? –

+0

ऐसा प्रतीत होता है कि आउटलुक इंस्पेक्टर को ठीक से शुरू होने के बाद ही लौटाता है। वह चाल है। आपको इसका इस्तेमाल नहीं करना है। – Woodman

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