2009-04-24 21 views
6

अतीत में मैंने फ़ाइल संलग्नक के साथ सी ++ एप्लिकेशन से Outlook (या जो भी वांछित एमएपीआई ईमेल एप्लिकेशन था) लॉन्च करने के लिए मैपिसेंडमेल का उपयोग किया है। (माइक्रोसॉफ्ट वर्ड की ईमेल कार्यक्षमता भेजने के समान)।सी # (संलग्नक के साथ) से ईमेल एप्लिकेशन (एमएपीआई) लॉन्च करना

मुझे सी # एप्लिकेशन से समकक्ष करने की आवश्यकता है और इसे XP, Vista, Server 2008 (और Windows 7 मुझे लगता है) पर चलते समय काम करने की आवश्यकता है।

मैपिसेंडमेल विस्टा/2008 के तहत कोई नहीं है क्योंकि यह हमेशा चल रहा है जब मैपआई_ E_FAILURE देता है और प्रबंधित कोड में एमएपीआई समर्थित नहीं है। इस फिक्स को जांचने के बाद भी: http://support.microsoft.com/kb/939718 मैं इसे विश्वसनीय रूप से काम नहीं कर सकता।

मुझे पता है कि माइक्रोसॉफ्ट वर्ड & एडोब रीडर 9 दोनों Vista के तहत अटैचमेंट के साथ Outlook लॉन्च कर सकते हैं।

ए सी # संगत समाधान को प्राथमिकता दी जाएगी, लेकिन मैं काम करने वाली किसी भी चीज़ से खुश हूं (एमएपीआई का उपयोग नहीं करना है)। मुझे लगता है कि वर्तमान "समाधान" क्या नहीं है। स्टैक ओवरफ़्लो पर मौजूद मौजूदा उत्तरों में से कोई भी इसे कवर करने के लिए प्रतीत नहीं होता है।

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

मुझे पता है MAPI हूँ और सी # एक साथ काम नहीं करते हैं, तो मैं एक C/C++ समाधान है कि Vista में काम करता है और सर्वर 2008 जब नहीं ले जाएगा व्यवस्थापक के रूप में चल रहा है। एडोब रीडर 9 & माइक्रोसॉफ्ट वर्ड को उदाहरण के रूप में देखें। जैसा कि बताया यह सभी ग्राहकों पर काम नहीं कर सकता के रूप में यह mailto URL spec का हिस्सा नहीं है:

+0

मुझे डर है कि मेरे पास आपके लिए कोई अच्छी खबर नहीं है। यह पोस्ट इंगित करता है कि आपको एमएपीआई या सीडीओ का उपयोग .NET के साथ नहीं करना चाहिए: http://blogs.msdn.com/mstehle/archive/2007/10/03/fyi-why-are-mapi-and- cdo-1-21-not-support-in-प्रबंधित-net-code.aspx – JMarsch

+0

@JMarsch, yep पहले इसे पढ़ें। जैसा कि मैंने इस प्रश्न में उल्लेख किया है, मैं एक गैर .NET उत्तर से खुश हूं जो काम करता है। मैं Vista या सर्वर 2008 के तहत सभी पर काम करने के लिए MAPISendMail नहीं प्राप्त कर सकता। – Steven

+0

क्या आप वास्तव में एक अनुलग्नक के साथ एक ईमेल भेजना चाहते हैं। या क्या अंतिम उपयोगकर्ता को वास्तव में इसे दृष्टिकोण में खोलने की आवश्यकता है? – PeteT

उत्तर

5

काम पर हमने सफलतापूर्वक VSTO का उपयोग करके यह किया है।

यहां कुछ पंक्तियों का स्निपेट है जो हम Outlook 2007 के साथ VISTA पर चल रहे हैं: (कोड VB.net में है)।

ध्यान दें कि Outlook ऑब्जेक्ट पर कुछ चीजें करते समय उपयोग सुरक्षा बंद है। (पते, शरीर और अन्य गुणों को सुरक्षा जोखिम के रूप में चिह्नित किया गया है)। हम इस सुरक्षा के आसपास जाने के लिए एक तृतीय पक्ष घटक (रिडेम्प्शन) का उपयोग करते हैं। यदि आप किसी प्रकार के सुरक्षा प्रबंधक का उपयोग नहीं करते हैं, तो दृष्टिकोण थोड़ा पॉपअप देगा कि बाहर कुछ ऐसा करने का प्रयास कर रहा है और आप इसे कुछ समय तक पहुंच सकते हैं।

Outlook इंटरफ़ेस का आयात।

Imports Outlook = Microsoft.Office.Interop.Outlook 

यह उदाहरण आपको कुछ दिशा देने के लिए है, पूर्ण कार्य उदाहरण नहीं।

dim MailItem As Microsoft.Office.Interop.Outlook.MailItem 

' Lets initialize outlook object ' 
MailItem = OutlookSession.Application.CreateItem(Outlook.OlItemType.olMailItem) 
MailItem.To = mailto 

MailItem.Subject = communication.Subject 
MailItem.BodyFormat = Outlook.OlBodyFormat.olFormatHTML 
MailItem.HTMLBody = htmlBody 

MailItem.Attachments.Add(filename, Outlook.OlAttachmentType.olByValue) 

' If True is supplied to Display it will act as modal and is executed sequential. ' 
SafeMail.Display(True) 

ऊपर के उदाहरण में OutlookSession इस प्रॉपर्टी से आ रही है:

Public ReadOnly Property OutlookSession() As Outlook.NameSpace 
     Get 
      If Not OutlookApplication Is Nothing Then 
       Return OutlookApplication.GetNamespace ("MAPI") 
      Else 
       Return Nothing 
      End If 
     End Get 
    End Property 

आप इसे इस के लिए अंदर MAPI उपयोग कर रहा है देख सकते हैं।

इसके साथ शुभकामनाएँ।

+0

Vista पर Outlook 2007 के साथ यदि आपके पास एक सक्रिय एंटी-वायरस प्रोग्राम चल रहा है, तो आपको Outlook सुरक्षा संकेत नहीं मिलेगा। – CoderDennis

+0

मैं इसका परीक्षण करूंगा और देख सकता हूं कि यह काम करता है, धन्यवाद। – Steven

1

बिट lowtech विधि है, लेकिन इन्हें मेल हैंडलर का उपयोग कर आप इस

System.Diagnostics.Process.Start("mailto:s[email protected]?subject=hello&attachment=c:\\chicken.xls"); 

नोट कर सकते हैं। सबसे महत्वपूर्ण बात यह है कि (मेरी दुनिया में कम से कम) Outlook 2007 इसका समर्थन नहीं करता है, जबकि पुराने संस्करणों ने किया था।

+3

दुर्भाग्य से अनुलग्नक mailto के माध्यम से काम नहीं करते हैं। – Steven

+0

@ स्टीवन, उपयोग मेल क्लाइंट पर निर्भर है। उदाहरण के लिए Outlook 2007 इसका समर्थन नहीं करता है, जबकि पुराने संस्करणों ने किया था। –

+0

@ स्टीवन, मैंने इसे प्रतिबिंबित करने के लिए उत्तर अपडेट किया है क्योंकि मुझे लगता है कि यह पहचान किए गए जोखिमों के साथ एक उपयोगी उत्तर है। –

1

मुझे यकीन नहीं है कि आपको Outlook में खोलने के लिए ईमेल की आवश्यकता है या यदि आप सी # से अनुलग्नक के साथ एक ईमेल भेजना चाहते हैं। मुझे पता है कि आपने दृष्टिकोण में खुला लिखा है लेकिन आप मान सकते हैं कि यह करने का यही एकमात्र तरीका है। यदि आप सिर्फ एक अनुलग्नक के साथ एक ईमेल भेजना चाहते हैं तो इसे नीचे की तरह कुछ किया जा सकता है।

#using System.Net.Mail; 

SmtpClient smtpClient = new SmtpClient(host, port); 

MailMessage message = new MailMessage(from, to, subject, body); 
Attachment attachment = new Attachment(@"H:\attachment.jpg"); 
message.Attachments.Add(attachment); 

System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential(username, password); 
smtpClient.UseDefaultCredentials = false; 
smtpClient.Credentials = SMTPUserInfo; 
smtpClient.Send(message); 

आप अपने ईमेल सर्वर के आधार पर प्रमाणीकरण बिट के बिना भी ऐसा कर सकते हैं।

0

सी # कोड आउटलुक के माध्यम से ईमेल भेजने के लिए; कोई सुरक्षा चेतावनी नहीं होती है।

var outlook = new ApplicationClass(); 
MailItem mailItem = (MailItem)outlook.Session.Application.CreateItem(Outlook.OlItemType.olMailItem); 

mailItem.Display(false); 
2

आप वास्तव में वीबी के लिए मोचन के रूप में जब तक आप बस एक ई-मेल में गुण सेट कर रहे हैं और उन्हें पढ़ नहीं के रूप में ऊपर सुझाव जरूरत नहीं है। अटैचमेंट के साथ दृष्टिकोण के माध्यम से ई-मेल दिखाने/भेजने के लिए यहां एक साधारण वीबी फ़ंक्शन है। (यह कोड माइक्रोसॉफ्ट आउटलुक 12.0 ऑब्जेक्ट लाइब्रेरी का संदर्भ देता है जैसे "सी: \ प्रोग्राम फ़ाइलें \ माइक्रोसॉफ्ट ऑफिस \ Office12 \ MSOUTL.OLB")।

Sub DoMail() 
    Set objOL = CreateObject("Outlook.Application") 
    Set objNewMail = objOL.CreateItem(olMailItem) 

    Dim filename As String 
    filename = "C:\\temp\\example.txt" 

    With objNewMail 
     .To = "[email protected]_me_not.com" 
     .Subject = "test" 
     .Body = "Test Body" 
     .Attachments.Add filename, Outlook.OlAttachmentType.olByValue 
    End With 

    objNewMail.Display 

    'objNewMail.Send 
End Sub 
+0

एक और टिप्पणी। यदि आप दृश्य सी ++ में काम कर रहे हैं, तो एमएफसी के पास एमएपीआई का उपयोग करके संलग्न दस्तावेज़ के साथ ई-मेल भेजने का एक तरीका है। विधि सीडी दस्तावेज़ :: ऑनफाइलसेन्डमेल() है। एमएपीआई के माध्यम से अपना स्वयं का "अटैचमेंट के साथ ई-मेल" बनाने के लिए यह कोड अनुकूलित करना भी आसान है। –

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