Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Eigene (Simple) MAPI32.DLL mit Delphi schreiben (https://www.delphipraxis.net/81206-eigene-simple-mapi32-dll-mit-delphi-schreiben.html)

Exceeder 22. Nov 2006 15:03


Eigene (Simple) MAPI32.DLL mit Delphi schreiben
 
Hallo,

ich würde gerne eine eigene (Simple) MAPI32.DLL mit Delphi schreiben. Ich möchte als MAPI Anfragen anderer Programme per MAPI abfangen und verarbeiten. Thunderbird und The Bat! bringen auch eine eigene MAPI32.DLL mit, welche eben für diese E-Mail Programme die MAPI Anfragen verarbeitet.

Um herauszufinden, wie das mit der MAPI32.DLL überhaupt geht, also welche Funktionen die DLL haben muss, habe ich mir bereits den Quelltext des Mozilla Firefox angesehen. Dort ist nur leider das Problem, dass überhaupt nicht genau erkennbar ist, wo die MAPI32.DLL implementation anfängt und wo sie aufhört. Windows/Microsoft liefert einen C-Header (mapi.h) mit. Ich weiß nichtmal, ob dieser Header für Delphi überhaupt verfügbar ist.

Hat das schonmal jemand von euch gemacht und wäre bereit seinen Quelltext zur Verfügung zu stellen? Da Dokumentation von Microsoft selbst Mangelware ist, wäre mir jeder Codeschnipsel eine große Hilfe.

Bei Suchen in Google findet man leider immer nur die typische Frage "Wie versende ich eine E-Mail per MAPI", das ist aber nicht das, was mich interessiert. Also, kann mir jemand helfen?

Exceeder

ste_ett 22. Nov 2006 15:12

Re: Eigene (Simple) MAPI32.DLL mit Delphi schreiben
 
Unter http://www.delphipraxis.net/internal...ct.php?t=73012 gibt's einen Lick zu den auf Delphi portierten MAPI-Header-Dateien. :)

Gruber_Hans_12345 22. Nov 2006 15:56

Re: Eigene (Simple) MAPI32.DLL mit Delphi schreiben
 
dpr der dll

Delphi-Quellcode:
library MyMAPI;

uses
  SysUtils,
  Windows,
  Classes,
  Dialogs,
  main in 'main.pas';

{$R *.res}

exports MAPILogon name 'MAPILogon';
exports MAPILogoff name 'MAPILogoff';
exports MAPISendMail name 'MAPISendMail';
exports MAPISendDocuments name 'MAPISendDocuments';
exports MAPIFindNext name 'MAPIFindNext';
exports MAPIReadMail name 'MAPIReadMail';
exports MAPISaveMail name 'MAPISaveMail';
exports MAPIDeleteMail name 'MAPIDeleteMail';
exports MAPIFreeBuffer name 'MAPIFreeBuffer';
exports MAPIAddress name 'MAPIAddress';
exports MAPIDetails name 'MAPIDetails';
exports MAPIResolveName name 'MAPIResolveName';
exports GetMapiDllVersion name 'GetMapiDllVersion';

procedure DllMain(reason: integer);
begin
    case reason of
        DLL_PROCESS_ATTACH:
            begin
//                ShowMEssage('Attach');
    ExitCode   := 0;
            end;
        DLL_PROCESS_DETACH :
            begin
//                ShowMEssage('Detach');
    ExitCode   := 0;
            end;
    end;
    ExitCode   := 0;
end;

begin
    DllProc    := @DllMain;
    DllProc(DLL_PROCESS_ATTACH);
end.
main.pas

Delphi-Quellcode:
unit main;

interface

uses
    Windows
    , Dialogs
    , MAPI
    ;

 
function MAPILogon(ulUIParam: Cardinal; lpszProfileName: LPSTR; lpszPassword: LPSTR; flFlags: FLAGS; ulReserved: Cardinal; lplhSession: PLHANDLE): Cardinal; stdcall;
function MapiLogOff(lhSession: LHANDLE; ulUIParam: Cardinal; flFlags: FLAGS; ulReserved: Cardinal): Cardinal; stdcall;
function MapiSendMail(lhSession: LHANDLE; ulUIParam: Cardinal; var lpMessage: TMapiMessage; flFlags: FLAGS; ulReserved: Cardinal): Cardinal; stdcall;
function MapiSendDocuments(ulUIParam: Cardinal; lpszDelimChar: LPSTR; lpszFilePaths: LPSTR; lpszFileNames: LPSTR; ulReserved: Cardinal): Cardinal;stdcall;
function MapiFindNext(lhSession: LHANDLE; ulUIParam: Cardinal;
        lpszMessageType: LPSTR; lpszSeedMessageID: LPSTR; flFlags: FLAGS;
        ulReserved: Cardinal; lpszMessageID: LPSTR): Cardinal;stdcall;
function MapiReadMail(lhSession: LHANDLE; ulUIParam: Cardinal;
        lpszMessageID: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
        var lppMessage: PMapiMessage): Cardinal;stdcall;
function MapiSaveMail(lhSession: LHANDLE; ulUIParam: Cardinal;
        var lpMessage: TMapiMessage; flFlags: FLAGS; ulReserved: Cardinal;
        lpszMessageID: LPSTR): Cardinal;stdcall;
function MapiDeleteMail(lhSession: LHANDLE; ulUIParam: Cardinal;
        lpszMessageID: LPSTR; flFlags: FLAGS;
        ulReserved: Cardinal): Cardinal;stdcall;
function MapiFreeBuffer(pv: Pointer): Cardinal;stdcall;
function MapiAddress(lhSession: LHANDLE; ulUIParam: Cardinal;
        lpszCaption: LPSTR; nEditFields: Cardinal; lpszLabels: LPSTR;
        nRecips: Cardinal; var lpRecips: TMapiRecipDesc; flFlags: FLAGS;
        ulReserved: Cardinal; lpnNewRecips: PULONG;
        var lppNewRecips: PMapiRecipDesc): Cardinal; stdcall;
function MapiDetails(lhSession: LHANDLE; ulUIParam: Cardinal;
        var lpRecip: TMapiRecipDesc; flFlags: FLAGS;
        ulReserved: Cardinal): Cardinal; stdcall;
function MapiResolveName(lhSession: LHANDLE; ulUIParam: Cardinal;
        lpszName: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
        var lppRecip: PMapiRecipDesc): Cardinal; stdcall;
function GetMapiDllVersion : Cardinal; stdcall;

implementation


//******************************************************************************

//******************************************************************************

function GetMapiDllVersion : Cardinal; stdcall;
begin
    MessageBeep(0);

    ShowMessage('GetDLLVersion');
    Result := 97;
end;


function MAPILogon(ulUIParam: Cardinal; lpszProfileName: LPSTR; lpszPassword: LPSTR; flFlags: FLAGS; ulReserved: Cardinal; lplhSession: PLHANDLE): Cardinal; stdcall;
begin
    MessageBeep(0);

    ShowMessage('Logon');
    Result := SUCCESS_SUCCESS
end;

function MapiLogOff(lhSession: LHANDLE; ulUIParam: Cardinal; flFlags: FLAGS; ulReserved: Cardinal): Cardinal; stdcall;
begin
    MessageBeep(0);

    ShowMessage('Logoff');
    Result := SUCCESS_SUCCESS
end;

function MapiSendMail(lhSession: LHANDLE; ulUIParam: Cardinal;
    var lpMessage: TMapiMessage; flFlags: FLAGS; ulReserved: Cardinal): Cardinal; stdcall;
begin
//    ShowMessage('SendMail');

    SendMAPIMail(lpMessage);
    Result := 1;
end;

function MapiSendDocuments(ulUIParam: Cardinal; lpszDelimChar: LPSTR;
  lpszFilePaths: LPSTR; lpszFileNames: LPSTR; ulReserved: Cardinal): Cardinal; stdcall;
begin
//    MessageBeep(0);

    {
    ShowMessage('SendDocuments : Deli : "'+lpszDelimChar+'"'+#13+#10+
        'FilePAth : "'+lpszFilePaths+'"'+#13+#10+
        'lpszFileNames : "'+lpszFileNames+'"'
    );
    }
    SendMAPIDocuments(lpszDelimChar, lpszFilePaths, lpszFileNames);
    Result := SUCCESS_SUCCESS;
end;

function MapiFindNext(lhSession: LHANDLE; ulUIParam: Cardinal;
  lpszMessageType: LPSTR; lpszSeedMessageID: LPSTR; flFlags: FLAGS;
  ulReserved: Cardinal; lpszMessageID: LPSTR): Cardinal;
begin
    Result := MAPI_E_FAILURE;
end;

function MapiReadMail(lhSession: LHANDLE; ulUIParam: Cardinal;
  lpszMessageID: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
  var lppMessage: PMapiMessage): Cardinal;
begin
    Result := MAPI_E_FAILURE;
end;

function MapiSaveMail(lhSession: LHANDLE; ulUIParam: Cardinal;
  var lpMessage: TMapiMessage; flFlags: FLAGS; ulReserved: Cardinal;
  lpszMessageID: LPSTR): Cardinal;
begin
    Result := MAPI_E_FAILURE;
end;

function MapiDeleteMail(lhSession: LHANDLE; ulUIParam: Cardinal;
  lpszMessageID: LPSTR; flFlags: FLAGS;
  ulReserved: Cardinal): Cardinal;
begin
    Result := MAPI_E_FAILURE;
end;

function MapiFreeBuffer(pv: Pointer): Cardinal;
begin
    Result := MAPI_E_FAILURE;
end;

function MapiAddress(lhSession: LHANDLE; ulUIParam: Cardinal;
  lpszCaption: LPSTR; nEditFields: Cardinal; lpszLabels: LPSTR;
  nRecips: Cardinal; var lpRecips: TMapiRecipDesc; flFlags: FLAGS;
  ulReserved: Cardinal; lpnNewRecips: PULONG;
  var lppNewRecips: PMapiRecipDesc): Cardinal;
begin
    Result := MAPI_E_FAILURE;
end;

function MapiDetails(lhSession: LHANDLE; ulUIParam: Cardinal;
  var lpRecip: TMapiRecipDesc; flFlags: FLAGS;
  ulReserved: Cardinal): Cardinal;
begin
    Result := MAPI_E_FAILURE;
end;

function MapiResolveName(lhSession: LHANDLE; ulUIParam: Cardinal;
  lpszName: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
  var lppRecip: PMapiRecipDesc): Cardinal;
begin
    Result := MAPI_E_FAILURE;
end;

end.
aber ohne gewähr, bei mir hat es mal gefunkt so, war nur ein test (deswegen die vielen Showmessages ;) )


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz