Mail versenden



  • Hallo Leute,

    ich bin gerade dabei eine kleine Alarmanlage zu basteln, welche mir eine e-mail senden soll, wenn eingebrochen wird. die hardware übergibt einen bestimmten wert an das programm und dieses startet dann outlook express mit einer vorgefertigten Nachricht incl. mail-adresse. wie bekomme ich es hin, dass diese e-mail auch gleich automatisch verschickt wird, ohne das jemand auf senden drückt?
    denn das will man ja nicht den einbrechern überlassen, oder?? images/smiles/icon_wink.gif
    mein jetziger code:

    ShellExecute(NULL,"open","mailto:mame@provider.com?"
    "subject=Einbruch!!&body=Hi Du da,%0A%0Ain Deine Wohnung "
    "wird gerade eingebrochen!!!%0A%0ADeine Alarmanlage", 0, 0, SW_SHOW);

    vielen Dank für Eure Vorschläge



  • Ja, da hast Du wohl recht. Ich kann mir auch schlecht vorstellen, daß der Gangster das Mail auch wirklich absetzt. 🙂

    Das Einfachste wird wohl SimpleMAPI sein. Allerdings ist MAPI nicht auf jedem Rechner installiert. Ich hab's jedenfalls gerade mal probiert. So in etwa kann das dann aussehn:

    #include <windows.h>
    #include <mapi.h>
    #include <tchar.h>
    #include <stdio.h>
    
    #define NUM_ELEMENTS(x)  (sizeof((x)) / sizeof((x)[0]))
    
    int _tmain(void)
    {
      LPMAPISENDMAIL pfnSendMail;
      MapiRecipDesc  rdOriginator;
      MapiRecipDesc  rdRecipient[1];
      LPMAPILOGOFF   pfnLogoff;
      LPMAPILOGON    pfnLogon;
      MapiMessage    mapimsg;
      HINSTANCE      hDll;
      LHANDLE        lHnd;
    
        if(NULL == (hDll = LoadLibrary(TEXT("MAPI32.DLL"))))
        {
            _tprintf(TEXT("could not load mapi32.dll, ErrorCode: %u"), GetLastError());
            return(0);
        }
    
        pfnLogon    = (LPMAPILOGON)   GetProcAddress(hDll, "MAPILogon");
        pfnLogoff   = (LPMAPILOGOFF)  GetProcAddress(hDll, "MAPILogoff");
        pfnSendMail = (LPMAPISENDMAIL)GetProcAddress(hDll, "MAPISendMail");
    
        pfnLogon(0, NULL, NULL, 0, 0, &lHnd);
    
        mapimsg.ulReserved          = 0;
        mapimsg.lpszSubject         = "This is the subject";
        mapimsg.lpszNoteText        = "This is the message";
        mapimsg.lpszMessageType     = NULL;
        mapimsg.lpszDateReceived    = NULL;
        mapimsg.lpszConversationID  = NULL;
        mapimsg.flFlags             = 0;
        mapimsg.lpOriginator        = &rdOriginator;
        mapimsg.nRecipCount         = NUM_ELEMENTS(rdRecipient);
        mapimsg.lpRecips            = rdRecipient;
        mapimsg.nFileCount          = 0;
        mapimsg.lpFiles             = NULL;
    
        rdOriginator.ulReserved     = 0;
        rdOriginator.ulRecipClass   = MAPI_ORIG;
        rdOriginator.lpszName       = "rdOriginator";
        rdOriginator.lpszAddress    = "test@irgendwo.de";
        rdOriginator.ulEIDSize      = 0;
        rdOriginator.lpEntryID      = NULL;
    
        rdRecipient[0].ulReserved   = 0;
        rdRecipient[0].ulRecipClass = MAPI_TO;
        rdRecipient[0].lpszName     = "rdRecipient[0]";
        rdRecipient[0].lpszAddress  = "test@irgendwo.de";
        rdRecipient[0].ulEIDSize    = 0;
        rdRecipient[0].lpEntryID    = NULL;
    
        pfnSendMail(lHnd, NULL, &mapimsg, 0, 0);
        pfnLogoff(lHnd, 0, 0, 0);
    
        FreeLibrary(hDll);
    
      return(0);
    }
    

    In der echten Anwendung sind dann aber die Rückgabewerte der Funktionen zu überprüfen!

    [ Dieser Beitrag wurde am 02.06.2002 um 01:03 Uhr von -King- editiert. ]



  • hab es gerade mal versucht, scheint auch erstmal zu laufen. jedenfalls kommt keine fehlermeldung. nur leider öffnet sich kein mailprogramm und es kommt auch keine mail an. was mach ich falsch?
    hab nur die mailadresse an den 2 stellen in meine geändert. hast du noch einen tipp? images/smiles/icon_confused.gif



  • Hast Du Dir mal die Rückgabewerte der Funktionen angeschaut?



  • Tut mir leid, aber ich bin ein fast Neuling was das angeht. images/smiles/icon_confused.gif
    wie mach ich das?



  • Schau in die MSDN was eine Funktion zurückgibt, wenn sie Erfolg hatte.
    Diesen Rückgabewert wertest du aus.



  • Diesen Thread könnte ich mir sehr gut in der FAQ vorstellen.



  • nochmal besten Dank an King und die anderen, die Tipps gaben.
    Jetzt funktioniert es tadellos :p
    Es lag an meinem Builder. Nach einer Neuinstallation funzt es jetzt



  • Wenn man zuviel Zeit hat, kann man auch sich das SMTP RFC reinziehen und alles manuell über winsockets schicken. 😉


Anmelden zum Antworten