2008-11-04 5 views
9

ShellExecute() позволяет выполнять простые задачи оболочки, позволяя системе заботиться об открытии или печати файлов. Я хочу использовать аналогичный подход для отправки приложения электронной почты программно.Как программно отправить электронное письмо так же, как я могу «Отправить почтовому получателю» в проводнике Windows?

Я не хочу манипулировать Outlook напрямую, так как я не хочу предполагать, какой почтовый клиент использует пользователь по умолчанию. Я не хочу отправлять электронную почту напрямую, так как я хочу, чтобы у пользователя была возможность написать тело электронной почты, используя своего предпочтительного клиента. Таким образом, я действительно хочу выполнить именно то, что делает Проводник Windows, когда я щелкаю правой кнопкой мыши файл, и выберите «Отправить» -> «Получатель почты».

Я ищу решение на C++.

ответ

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

Как установить получателя (s)? – Tim 2010-02-28 03:37:50

2

В оболочке Windows можно использовать стандартную команду «mailto:». Он будет запускать почтовый клиент по умолчанию.

0

Вам необходимо реализовать MAPI client.. Это позволит вам предварительно заполнить документ, добавить вложения и т. Д., Прежде чем отправлять сообщение пользователю для отправки. Вы можете использовать хранилище сообщений по умолчанию для использования своего почтового клиента по умолчанию.

Смежные вопросы