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;
}
//---------------------------------------------------------------------------
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.