CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Wysyłanie maila via MAPI/Outlook
Strona 1 z 1

Wysyłanie maila via MAPI/Outlook

Nowy postNapisane: piątek, 31 lipca 2020, 11:34
przez Mironas
Prosta funkcja do wysyłania maili via MAPI działa doskonale jeśli zainstalowanym i domyślnym programem pocztowym jest Mozilla Thunderbird, ale jeśli ustawimy Outlooka to dostaję komunikat:
Brak domyślnego klienta poczty lub bieżący klient poczty niem może spełnić żadania obsługi wiadomości. Uruchom program Microsoft Outlook i ustaw go jako domyślnego klineta poczty.


Zaznaczam, że Outlook jest ustawiony jako domyślny dla aplikacji jak i dla protokołu MAILTO.

Kod wygląda następująco:
Unit1.h
KOD cpp:     UKRYJ  
#include <Winapi.Mapi.hpp>
 

Unit1.cpp
KOD cpp:     UKRYJ  
// Wyślij Maila via MAPI
int TForm1::WyslijMailaViaMAPI(AnsiString adres, AnsiString tytul, AnsiString tresc)
{
  int wynik = -1;

  try
  {
    // Logowanie do MAPI
    LHANDLE mapiSession;
    MapiLogOn(0, NULL, NULL, 0, 0, &mapiSession);

    // Wyślij maila via MAPI
    MapiRecipDesc SendTo  = {0, MAPI_TO, NULL, adres.c_str(), 0, NULL};     // adres
    MapiMessage   Message = {0, tytul.c_str(), tresc.c_str(), NULL, NULL, NULL, 0, NULL, 1, &SendTo, 0, NULL};
    wynik = MapiSendMail(mapiSession, 0, Message, 0, 0);

    // Wyloguj
    MapiLogOff(mapiSession, 0, 0, 0);
  }
  catch (...)
  {}

  return wynik;
}
//---------------------------------------------------------------------------
 


Funkcja MapiSendMail zwraca wartość 2 - MAPI_E_FAILURE (One or more unspecified errors occurred. No message was sent.).

Bardzo podobny kod wg tej porady daje identyczne wyniki.

Ciekawostka - jeśli mam zainstalowanie zarówno Outlooka (jako domyślny) jaki i Thunderbirda, to wysyłanie maila za pomocą ShellExecute otwiera Outlooka, a za pomocą MAPI Thunderbirda (i mail wysyła się poprawnie). Przypuszczam, że system nie mogąc wysłać przez aplikację domyślną, wysyła przez kolejną zainstalowaną - ale to tylko moje domniemanie.

Re: Wysyłanie maila via MAPI/Outlook

Nowy postNapisane: sobota, 1 sierpnia 2020, 10:23
przez lukagrom
Tak tylko dla ciekawostki, dla "surowej" maszyny bez Outlooka, Mozilli Thunderbird i żadnego innego przypisanego programu pocztowego int WyslijMailaViaMAPI(AnsiString adres, AnsiString tytul, AnsiString tresc) zwraca 1.Z kolei ShellExecute inicjuje komunikat (Windows 10) - "Dodaj konto do aplikacji Poczta".

Re: Wysyłanie maila via MAPI/Outlook

Nowy postNapisane: sobota, 1 sierpnia 2020, 10:29
przez polymorphism
Użyj biblioteki libcurl.