2008-11-04 7 views
9

ShellExecute() मुझे सरल खोल कार्यों को करने की अनुमति देता है, जिससे सिस्टम को खोलने या प्रिंट करने की देखभाल करने की अनुमति मिलती है। मैं प्रोग्राम संलग्न रूप से एक ईमेल अनुलग्नक भेजने के लिए एक समान दृष्टिकोण लेना चाहता हूं।मैं विंडोज एक्सप्लोरर में प्रोग्रामेटिक रूप से एक ईमेल कैसे भेज सकता हूं जिस तरह से मैं "मेल प्राप्तकर्ता को भेज सकता हूं"?

मैं सीधे Outlook में हेरफेर नहीं करना चाहता, क्योंकि मैं यह नहीं मानना ​​चाहता कि उपयोगकर्ता किस ईमेल क्लाइंट को डिफ़ॉल्ट रूप से उपयोग करता है। मैं सीधे ईमेल नहीं भेजना चाहता, क्योंकि मैं चाहता हूं कि उपयोगकर्ता को अपने पसंदीदा ग्राहक का उपयोग करके ईमेल बॉडी लिखने का अवसर प्राप्त हो। इस प्रकार, मैं वास्तव में विंडोज एक्सप्लोरर करता हूं जब मैं एक फ़ाइल पर राइट क्लिक करता हूं और भेजें -> मेल प्राप्तकर्ता का चयन करता हूं।

मैं एक सी ++ समाधान की तलाश में हूं।

उत्तर

8

यह मेरा MAPI समाधान है:

#include <tchar.h> 
#include <windows.h> 
#include <mapi.h> 
#include <mapix.h> 

int _tmain(int argc, wchar_t *argv[]) 
{ 
    HMODULE hMapiModule = LoadLibrary(_T("mapi32.dll")); 

    if (hMapiModule != NULL) 
    { 
     LPMAPIINITIALIZE lpfnMAPIInitialize = NULL; 
     LPMAPIUNINITIALIZE lpfnMAPIUninitialize = NULL; 
     LPMAPILOGONEX lpfnMAPILogonEx = NULL; 
     LPMAPISENDDOCUMENTS lpfnMAPISendDocuments = NULL; 
     LPMAPISESSION lplhSession = NULL; 

     lpfnMAPIInitialize = (LPMAPIINITIALIZE)GetProcAddress(hMapiModule, "MAPIInitialize"); 
     lpfnMAPIUninitialize = (LPMAPIUNINITIALIZE)GetProcAddress(hMapiModule, "MAPIUninitialize"); 
     lpfnMAPILogonEx = (LPMAPILOGONEX)GetProcAddress(hMapiModule, "MAPILogonEx"); 
     lpfnMAPISendDocuments = (LPMAPISENDDOCUMENTS)GetProcAddress(hMapiModule, "MAPISendDocuments"); 

     if (lpfnMAPIInitialize && lpfnMAPIUninitialize && lpfnMAPILogonEx && lpfnMAPISendDocuments) 
     { 
      HRESULT hr = (*lpfnMAPIInitialize)(NULL); 

      if (SUCCEEDED(hr)) 
      { 
       hr = (*lpfnMAPILogonEx)(0, NULL, NULL, MAPI_EXTENDED | MAPI_USE_DEFAULT, &lplhSession); 

       if (SUCCEEDED(hr)) 
       { 
        // this opens the email client with "C:\attachment.txt" as an attachment 
        hr = (*lpfnMAPISendDocuments)(0, ";", "C:\\attachment.txt", NULL, NULL); 

        if (SUCCEEDED(hr)) 
        { 
         hr = lplhSession->Logoff(0, 0, 0); 
         hr = lplhSession->Release(); 
         lplhSession = NULL; 
        } 
       } 
      } 

      (*lpfnMAPIUninitialize)(); 
     } 

     FreeLibrary(hMapiModule); 
    } 

    return 0; 
} 
+0

मैं प्राप्तकर्ता किस तरह निर्धारित (रों)? – Tim

+0

यह 100% प्रोग्रामेटिक समाधान नहीं है। यह कोड अनुलग्नक के रूप में जोड़े गए प्रदत्त फ़ाइल के साथ ईमेल क्लाइंट खोलता है। यह तब उपयोगकर्ता को प्राप्तकर्ता (ओं) में टाइप करने के लिए होता है, जैसा कि वे किसी भी समय करेंगे। –

+0

मैपिक्स.h सहित Outlook शीर्षलेख, निम्नलिखित स्थान पर एमएसडीएन से डाउनलोड किए जा सकते हैं - https://www.microsoft.com/en-us/download/confirmation.aspx?id=12905 हालांकि, मुझे मिल रहा है इस कोड को निष्पादित करते समय एक त्रुटि, जो कहती है कि एक डिफ़ॉल्ट ईमेल क्लाइंट स्थापित नहीं है। लेकिन मैं ईमेल पर किसी भी फाइल भेजकर विंडोज एक्सप्लोरर से आउटलुक का आह्वान कर सकता हूं। – armanali

2

आप विंडोज शैल में मानक "mailto:" कमांड का उपयोग कर सकते हैं। यह डिफ़ॉल्ट मेल क्लाइंट चलाएगा।

0

आपको MAPI client. लागू करने की आवश्यकता होगी, यह आपको दस्तावेज़ को पूर्ववत करने, अनुलग्नक जोड़ने आदि को उपयोगकर्ता को संदेश भेजने से पहले प्रस्तुत करने देगा। आप अपने डिफ़ॉल्ट मेल क्लाइंट का उपयोग करने के लिए डिफ़ॉल्ट संदेश स्टोर का उपयोग कर सकते हैं।

1

निम्नलिखित सी ++ उदाहरण से पता चलता SendTo मेल शॉर्टकट Windows Explorer द्वारा इस्तेमाल किया आह्वान करने के लिए कैसे:

http://www.codeproject.com/KB/shell/sendtomail.aspx

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

  • कोई संबंधित समस्या नहीं^_^