B
Hier ist die von mir gefundende Lösung (das meiste abgeschrieben):
#include <windows.h>
#include <mapi.h>
LPMAPILOGON lpfnMapiLogon;
LPMAPISENDMAIL lpfnMapiSendMail;
LPMAPILOGOFF lpfnMapiLogoff;
HANDLE hMAPILib;
ULONG ulLogon;
ULONG ulLogoff;
ULONG ulSendMail;
LHANDLE lhSession;
char email[] = "SMTP:xxxxxx@xxxxxx.xxx";
char subject[60] = ""; // Betreffzeile
char note[512] = ""; // Test der E-Mail
// .. MAPI-Struktur Empfaenger
MapiRecipDesc recipient =
{
0, // ulReserved
MAPI_TO, // ulRecipClass
"", // lpszName
email, // lpszAddress = Adresse des Empfaengers
0, // ulEIDSize
NULL // lpEntryID
};
// .. MAPI-Struktur Inhalte der E-Mail
MapiMessage message =
{
0, // reserved
subject, // lpszSubject = Text des Betreffs
note, // lpszNoteText = Text der E-Mail
NULL, // lpszMessageType
NULL, // lpszDateReceived
NULL, // lpszConersationID
0, // flFlags
NULL,
1, // nRecipCount = nur 1 Empfaenger
&recipient, // lpRecips = Struktur des Empfaengers
0, // nFileCount
NULL // lpFiles
};
// .. MAPI-Lib laden
hMAPILib = LoadLibrary("MAPI32.DLL");
// .. email vervollständigen (kann bei Bedarf durch Benutzereingaben erfolgen)
strcpy(subject,"Betreff: Test E-Mail aus einem Programm senden");
strcpy(note,"Hallo, hier ist eine Testmail\n\nViele liebe Grüsse)";
// .. MAPI-Adressen holen
lpfnMapiLogon = (LPMAPILOGON)GetProcAddress(hMAPILib,"MAPILogon");
lpfnMapiSendMail = (LPMAPISENDMAIL)GetProcAddress(hMAPILib,"MAPISendMail");
lpfnMapiLogoff = (LPMAPILOGOFF)GetProcAddress(hMAPILib,"MAPILogoff");
// .. MAPI-Funktionen aufrufen (return-Werte ggfs. zur Kontrolle)
ulLogon = (*lpfnMapiLogon)(0,NULL,NULL,0,0,&lhSession);
ulSendMail = (*lpfnMapiSendMail)(lhSession,0,&message,0,0);
ulLogoff = (*lpfnMapiLogoff)(lhSession,0,0,0);
// .. MAPI-Lib freigeben
FreeLibrary(hMAPILib);
Klar, betrachten E-Mail-Server das als verdächtig, sowohl auf der Seite des Senders als auch auf der Seite des Empfängers. Mit dem Anmeckern muss und kann man leben, auch wenn es im Spam-Ordner ankommt. Für den vorgesehen Zweck reicht es!