eMailversand funktioniert nicht -> Fokus inaktiv



  • Hallo Alle zusammen,

    auf ein neues Problem... 🙂

    Ich versuche aus meiner Anwendung heraus, eine eMail zu verschicken. Dazu verwende ich die Simple MAPI. Ich bereite zuerst die eMail vor, und möchte auch ein Dialog sehen.

    Den Dialog sehe ich auch, und auch die zuvor eingegebenen Daten, jedoch, kann ich nicht mehr das Dialog bzw. die eMail wegschicken, meine Anwendung ist dann dementsprechend auch blockiert...

    Ich weiss net, warum das so ist, verliere ich irgendwie das Handle auf das Fenster? Hier ist mein Code:

    AnsiString Anrede;
        char Mailadresse[50];
        char Mail_Anrede[100];
    
        LPMAPILOGOFF   pfnLogoff;
        LPMAPILOGON    pfnLogon;
        MapiRecipDesc  rdOriginator;
        LHANDLE        lHnd;
        DBE_Mail->GetTextBuf(Mailadresse,50);
        DBE_PerAnrede->GetTextBuf(Mail_Anrede,100);
    
        const HINSTANCE hMAPILib = ::LoadLibrary("MAPI32.DLL");
    
    	if (hMAPILib)
    	{
                    pfnLogon    = (LPMAPILOGON)GetProcAddress(hMAPILib, "MAPILogon");
                    pfnLogoff   = (LPMAPILOGOFF)GetProcAddress(hMAPILib, "MAPILogoff");
    		MAPIFUNC lpMAPISendMail
             = (MAPIFUNC) GetProcAddress(hMAPILib, "MAPISendMail");
                    pfnLogon(0, NULL, NULL, 0, 0, &lHnd); // Einloggen
    		if (lpMAPISendMail != NULL)
    		{
    		  static MapiMessage Msg;
                MapiRecipDesc recip[2];
                memset(&Msg, 0, sizeof(Msg));
                recip[0].ulReserved = 0;
                recip[0].ulRecipClass = MAPI_TO;
                recip[0].lpszName = Mailadresse;
                recip[0].lpszAddress = Mailadresse;
                recip[0].ulEIDSize = 0;
                recip[0].lpEntryID = NULL;
                recip[1].ulReserved = 0;
                recip[1].ulRecipClass = MAPI_CC;
                recip[1].lpszName = " ";
                recip[1].lpszAddress = NULL;
                recip[1].ulEIDSize = 0;
                recip[1].lpEntryID = NULL;
    
            rdOriginator.ulReserved   = 0;
            rdOriginator.ulRecipClass = MAPI_ORIG;
            rdOriginator.lpszName     = "rdOriginator";
            rdOriginator.lpszAddress  = "ich@sender.de"; // Sender
            rdOriginator.ulEIDSize    = 0;
            rdOriginator.lpEntryID    = NULL;
      	 	    Msg.lpszSubject  = "";
    			Msg.lpszNoteText = Mail_Anrede;
                Msg.nRecipCount =2;
    		    Msg.lpRecips =recip;
                Msg.nFileCount=0;
                lpMAPISendMail(NULL, NULL, &Msg, (FLAGS) (MAPI_LOGON_UI | MAPI_DIALOG), 0);
                pfnLogoff(lHnd, 0, 0, 0); // Ausloggen
    		}
    		else
    		{
    		   //	ASSERT(FALSE);
    		}
    
    		//VERIFY(::FreeLibrary(hMAPILib));
    	}
    	else
    	{
            _tprintf(TEXT("could not load mapi32.dll, ErrorCode: %u"), GetLastError());
    
    	}
    
            FreeLibrary(hMAPILib);
    

    Gruss,
    chullain





  • Danke erstmal...aber mit dem INDY kann ich nur die Mails versenden, das kann ich auch mit der SIMPLE MAPI, aber ich möchte ja auch mir den Dialog vorher ansehen, der verschickt wird...und da entsteht das Problem, dass ich einfach den Fokus verliere...

    Gruss,
    chullain



  • Was includest du alles um das Teil zu compilern?
    Ich krieg haufenweise undefinierte Symbole.
    Du könntest dir natürlich selbst nen Dialog basteln und die Daten dann an die INDY-Komponente übergeben?



  • hmm...net mehr als die mapi.h...das Basteln mit dem eigenen Dialog ist v. etwas aufwendig, vor allem, war das Outlook-Fenster schon vorher in der Anwendung definiert (neues Release), das möchte ich nicht gerne wieder ändern...

    Gruss,
    chullain



  • chullain schrieb:

    Den Dialog sehe ich auch, und auch die zuvor eingegebenen Daten, jedoch, kann ich nicht mehr das Dialog bzw. die eMail wegschicken [...]

    Das dürfte ein Fehler in deinem MAPI-Code sein, mit dem BCB hat das aber nichts zu tun.

    Wenn deine Mails keine Anhänge enthalten dann kannst du das Ganze auch in einem Einzeiler mittels ShellExecute erledigen, siehe die FAQ unter "Verschiedenes".


Log in to reply