E-Mail aus Anwendung schicken
-
Frage1 schrieb:
Warum braucht man eigentlich immer einen SMTP Server, um Mails zu versenden? Kann man nicht direkt mit dem Zielserver kommunizieren? Kennt ihr eine lib? Wenn möglich für C/C++ und PHP.
Sich direkt mit dem Ziel-SMTP-Server zu verbinden und die eMail dort abzuliefern hat mehrere Probleme, z.B.:
- Sehr viele Mailserver blockieren dynamische IP-Adressen, akzeptieren keine eMails von dynamischen IPs oder sortieren die eMails direkt in den Spam-Ordner
- Mailversand kann wegen Techniken wie Greylisting fehlschlagen-------
Beim Weg über MAPI gibt es bei codeproject recht viel:
http://www.codeproject.com/KB/IP/#MAPI
-
Sorry, ich meinte eigentlich, von einem dedicated server mit fixer IP aus eine Mail zu versenden.
Da trifft das dann ja nicht zu?
Weil wozu sollte main auf einem ded. server einen SMTP Server laufen lassen, nur weil man eine Mail verschicken will?
-
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!