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

Wysyłanie maila via MAPI/Outlook

dział ogólny

Wysyłanie maila via MAPI/Outlook

Nowy postprzez Mironas » piątek, 31 lipca 2020, 11:34

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.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 467
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 22
Otrzymał podziękowań: 66
System operacyjny: Windows 10
Kompilator: C++Builder 10.2 Tokyo
TMS Components Pack
Gadu Gadu: 0
    WindowsChrome

Re: Wysyłanie maila via MAPI/Outlook

Nowy postprzez lukagrom » sobota, 1 sierpnia 2020, 10:23

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".
Avatar użytkownika
lukagrom
Intelektryk
Intelektryk
 
Posty: 129
Dołączył(a): wtorek, 1 stycznia 2013, 14:54
Podziękował : 9
Otrzymał podziękowań: 5
System operacyjny: Windows Vista
Kompilator: C++ Builder 10.1 Starter
Gadu Gadu: 0
    WindowsChrome

Re: Wysyłanie maila via MAPI/Outlook

Nowy postprzez polymorphism » sobota, 1 sierpnia 2020, 10:29

Użyj biblioteki libcurl.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2263
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 210
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości

cron