home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Plus! (NZ) 2001 June
/
HDC50.iso
/
Runimage
/
Delphi50
/
Source
/
Rtl
/
Win
/
MAPI.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1999-08-11
|
23KB
|
595 lines
{*******************************************************}
{ }
{ Borland Delphi Runtime Library }
{ Simple MAPI Interface Unit }
{ }
{ Copyright (C) 1996,99 Inprise Corporation }
{ }
{*******************************************************}
unit Mapi;
{NOTE: Do not place the $NOPACKAGEUNIT directive in this file}
interface
uses Windows;
{
Messaging Applications Programming Interface.
Purpose:
This file defines the structures and constants used by that
subset of the Messaging Applications Programming Interface
which is supported under Windows by Microsoft Mail for PC
Networks version 3.x.
}
(*$HPPEMIT '#include <mapi.h>'*)
type
{$EXTERNALSYM FLAGS}
FLAGS = Cardinal;
{$EXTERNALSYM LHANDLE}
LHANDLE = Cardinal;
PLHANDLE = ^Cardinal;
const
{$EXTERNALSYM lhSessionNull}
lhSessionNull = (0);
type
PMapiFileDesc = ^TMapiFileDesc;
{$EXTERNALSYM MapiFileDesc}
MapiFileDesc = packed record
ulReserved: Cardinal; { Reserved for future use (must be 0) }
flFlags: Cardinal; { Flags }
nPosition: Cardinal; { character in text to be replaced by attachment }
lpszPathName: LPSTR; { Full path name of attachment file }
lpszFileName: LPSTR; { Original file name (optional) }
lpFileType: Pointer; { Attachment file type (can be lpMapiFileTagExt) }
end;
TMapiFileDesc = MapiFileDesc;
const
{$EXTERNALSYM MAPI_OLE}
MAPI_OLE = $00000001;
{$EXTERNALSYM MAPI_OLE_STATIC}
MAPI_OLE_STATIC = $00000002;
type
PMapiFileTagExt = ^TMapiFileTagExt;
{$EXTERNALSYM MapiFileTagExt}
MapiFileTagExt = packed record
ulReserved: Cardinal; { Reserved, must be zero. }
cbTag: Cardinal; { Size (in bytes) of }
lpTag: PByte; { X.400 OID for this attachment type }
cbEncoding: Cardinal; { Size (in bytes) of }
lpEncoding: PByte; { X.400 OID for this attachment's encoding }
end;
TMapiFileTagExt = MapiFileTagExt;
PMapiRecipDesc = ^TMapiRecipDesc;
{$EXTERNALSYM MapiRecipDesc}
MapiRecipDesc = packed record
ulReserved: Cardinal; { Reserved for future use }
ulRecipClass: Cardinal; { Recipient class }
{ MAPI_TO, MAPI_CC, MAPI_BCC, MAPI_ORIG }
lpszName: LPSTR; { Recipient name }
lpszAddress: LPSTR; { Recipient address (optional) }
ulEIDSize: Cardinal; { Count in bytes of size of pEntryID }
lpEntryID: Pointer; { System-specific recipient reference }
end;
TMapiRecipDesc = MapiRecipDesc;
const
{$EXTERNALSYM MAPI_ORIG}
MAPI_ORIG = 0; { Recipient is message originator }
{$EXTERNALSYM MAPI_TO}
MAPI_TO = 1; { Recipient is a primary recipient }
{$EXTERNALSYM MAPI_CC}
MAPI_CC = 2; { Recipient is a copy recipient }
{$EXTERNALSYM MAPI_BCC}
MAPI_BCC = 3; { Recipient is blind copy recipient }
type
PMapiMessage = ^TMapiMessage;
{$EXTERNALSYM MapiMessage}
MapiMessage = packed record
ulReserved: Cardinal; { Reserved for future use (M.B. 0) }
lpszSubject: LPSTR; { Message Subject }
lpszNoteText: LPSTR; { Message Text }
lpszMessageType: LPSTR; { Message Class }
lpszDateReceived: LPSTR; { in YYYY/MM/DD HH:MM format }
lpszConversationID: LPSTR; { conversation thread ID }
flFlags: FLAGS; { unread,return receipt }
lpOriginator: PMapiRecipDesc; { Originator descriptor }
nRecipCount: Cardinal; { Number of recipients }
lpRecips: PMapiRecipDesc; { Recipient descriptors }
nFileCount: Cardinal; { # of file attachments }
lpFiles: PMapiFileDesc; { Attachment descriptors }
end;
TMapiMessage = MapiMessage;
const
{$EXTERNALSYM MAPI_UNREAD}
MAPI_UNREAD = $00000001;
{$EXTERNALSYM MAPI_RECEIPT_REQUESTED}
MAPI_RECEIPT_REQUESTED = $00000002;
{$EXTERNALSYM MAPI_SENT}
MAPI_SENT = $00000004;
{ Entry points. }
{ flFlags values for Simple MAPI entry points. All documented flags are
shown for each call. Duplicates are commented out but remain present
for every call. }
{ MAPILogon() flags. }
{$EXTERNALSYM MAPI_LOGON_UI}
MAPI_LOGON_UI = $00000001; { Display logon UI }
{$EXTERNALSYM MAPI_PASSWORD_UI}
MAPI_PASSWORD_UI = $00020000; { prompt for password only }
{$EXTERNALSYM MAPI_NEW_SESSION}
MAPI_NEW_SESSION = $00000002; { Don't use shared session }
{$EXTERNALSYM MAPI_FORCE_DOWNLOAD}
MAPI_FORCE_DOWNLOAD = $00001000; { Get new mail before return }
{$EXTERNALSYM MAPI_ALLOW_OTHERS}
MAPI_ALLOW_OTHERS = $00000008; { Make this a shared session (removed from 4.0 SDK) }
{$EXTERNALSYM MAPI_EXPLICIT_PROFILE}
MAPI_EXPLICIT_PROFILE = $00000010; { Don't use default profile (removed from 4.0 SDK) }
{$EXTERNALSYM MAPI_EXTENDED}
MAPI_EXTENDED = $00000020; { Extended MAPI Logon }
{$EXTERNALSYM MAPI_USE_DEFAULT}
MAPI_USE_DEFAULT = $00000040; { Use default profile in logon (removed from 4.0 SDK) }
{$EXTERNALSYM MAPI_SIMPLE_DEFAULT}
MAPI_SIMPLE_DEFAULT = MAPI_LOGON_UI or MAPI_FORCE_DOWNLOAD or MAPI_ALLOW_OTHERS; { removed from 4.0 SDK }
{$EXTERNALSYM MAPI_SIMPLE_EXPLICIT}
MAPI_SIMPLE_EXPLICIT = MAPI_NEW_SESSION or MAPI_FORCE_DOWNLOAD or MAPI_EXPLICIT_PROFILE; { removed from 4.0 SDK }
{ MAPILogoff() flags. }
{$EXTERNALSYM MAPI_LOGOFF_SHARED}
MAPI_LOGOFF_SHARED = $00000001; { Close all shared sessions (removed from 4.0 SDK) }
{$EXTERNALSYM MAPI_LOGOFF_UI}
MAPI_LOGOFF_UI = $00000002; { It's OK to present UI (removed from 4.0 SDK) }
{ MAPISendMail() flags. }
{ #define MAPI_LOGON_UI 0x00000001 Display logon UI }
{ #define MAPI_NEW_SESSION 0x00000002 Don't use shared session }
{$EXTERNALSYM MAPI_DIALOG}
MAPI_DIALOG = $00000008; { Display a send note UI }
{ # define MAPI_USE_DEFAULT 0x00000040 Use default profile in logon }
{ MAPIFindNext() flags. }
{$EXTERNALSYM MAPI_UNREAD_ONLY}
MAPI_UNREAD_ONLY = $00000020; { Only unread messages }
{$EXTERNALSYM MAPI_GUARANTEE_FIFO}
MAPI_GUARANTEE_FIFO = $00000100; { use date order }
{$EXTERNALSYM MAPI_LONG_MSGID}
MAPI_LONG_MSGID = $00004000; { allow 512 char returned ID }
{ MAPIReadMail() flags. }
{$EXTERNALSYM MAPI_PEEK}
MAPI_PEEK = $00000080; { Do not mark as read. }
{$EXTERNALSYM MAPI_SUPPRESS_ATTACH}
MAPI_SUPPRESS_ATTACH = $00000800; { header + body, no files }
{$EXTERNALSYM MAPI_ENVELOPE_ONLY}
MAPI_ENVELOPE_ONLY = $00000040; { Only header information }
{$EXTERNALSYM MAPI_BODY_AS_FILE}
MAPI_BODY_AS_FILE = $00000200;
{ MAPISaveMail() flags. }
{ #define MAPI_LOGON_UI 0x00000001 Display logon UI }
{ #define MAPI_NEW_SESSION 0x00000002 Don't use shared session }
{ #define MAPI_LONG_MSGID 0x00004000 /* allow 512 char returned ID }
{ MAPIAddress() flags. }
{ #define MAPI_LOGON_UI 0x00000001 Display logon UI }
{ #define MAPI_NEW_SESSION 0x00000002 Don't use shared session }
{ MAPIDetails() flags. }
{ #define MAPI_LOGON_UI 0x00000001 Display logon UI }
{ #define MAPI_NEW_SESSION 0x00000002 Don't use shared session }
{$EXTERNALSYM MAPI_AB_NOMODIFY}
MAPI_AB_NOMODIFY = $00000400; { Don't allow mods of AB entries }
{ MAPIResolveName() flags. }
{ #define MAPI_LOGON_UI 0x00000001 Display logon UI }
{ #define MAPI_NEW_SESSION 0x00000002 Don't use shared session }
{ #define MAPI_DIALOG 0x00000008 Prompt for choices if ambiguous }
{ #define MAPI_AB_NOMODIFY 0x00000400 Don't allow mods of AB entries }
type
PFNMapiLogon = ^TFNMapiLogOn;
TFNMapiLogOn = function(ulUIParam: Cardinal; lpszProfileName: LPSTR;
lpszPassword: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
lplhSession: PLHANDLE): Cardinal stdcall;
PFNMapiLogOff = ^TFNMapiLogOff;
TFNMapiLogOff = function(lhSession: LHANDLE; ulUIParam: Cardinal; flFlags: FLAGS;
ulReserved: Cardinal): Cardinal stdcall;
PFNMapiSendMail = ^TFNMapiSendMail;
TFNMapiSendMail = function(lhSession: LHANDLE; ulUIParam: Cardinal;
var lpMessage: TMapiMessage; flFlags: FLAGS;
ulReserved: Cardinal): Cardinal stdcall;
PFNMapiSendDocuments = ^TFNMapiSendDocuments;
TFNMapiSendDocuments = function(ulUIParam: Cardinal; lpszDelimChar: LPSTR;
lpszFilePaths: LPSTR; lpszFileNames: LPSTR;
ulReserved: Cardinal): Cardinal stdcall;
PFNMapiFindNext = ^TFNMapiFindNext;
TFNMapiFindNext = function(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszMessageType: LPSTR; lpszSeedMessageID: LPSTR; flFlags: FLAGS;
ulReserved: Cardinal; lpszMessageID: LPSTR): Cardinal stdcall;
PFNMapiReadMail = ^TFNMapiReadMail;
TFNMapiReadMail = function(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszMessageID: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
var lppMessage: PMapiMessage): Cardinal stdcall;
PFNMapiSaveMail = ^TFNMapiSaveMail;
TFNMapiSaveMail = function(lhSession: LHANDLE; ulUIParam: Cardinal;
var lpMessage: TMapiMessage; flFlags: FLAGS; ulReserved: Cardinal;
lpszMessageID: LPSTR): Cardinal stdcall;
PFNMapiDeleteMail = ^TFNMapiDeleteMail;
TFNMapiDeleteMail = function(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszMessageID: LPSTR; flFlags: FLAGS;
ulReserved: Cardinal): Cardinal stdcall;
PFNMapiFreeBuffer = ^TFNMapiFreeBuffer;
TFNMapiFreeBuffer = function(pv: Pointer): Cardinal stdcall;
PFNMapiAddress = ^TFNMapiAddress;
TFNMapiAddress = function(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;
PFNMapiDetails = ^TFNMapiDetails;
TFNMapiDetails = function(lhSession: LHANDLE; ulUIParam: Cardinal;
var lpRecip: TMapiRecipDesc; flFlags: FLAGS;
ulReserved: Cardinal): Cardinal stdcall;
PFNMapiResolveName = ^TFNMapiResolveName;
TFNMapiResolveName = function(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszName: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
var lppRecip: PMapiRecipDesc): Cardinal stdcall;
const
{$EXTERNALSYM SUCCESS_SUCCESS}
SUCCESS_SUCCESS = 0;
{$EXTERNALSYM MAPI_USER_ABORT}
MAPI_USER_ABORT = 1;
{$EXTERNALSYM MAPI_E_USER_ABORT}
MAPI_E_USER_ABORT = MAPI_USER_ABORT;
{$EXTERNALSYM MAPI_E_FAILURE}
MAPI_E_FAILURE = 2;
{$EXTERNALSYM MAPI_E_LOGON_FAILURE}
MAPI_E_LOGON_FAILURE = 3;
{$EXTERNALSYM MAPI_E_LOGIN_FAILURE}
MAPI_E_LOGIN_FAILURE = MAPI_E_LOGON_FAILURE;
{$EXTERNALSYM MAPI_E_DISK_FULL}
MAPI_E_DISK_FULL = 4;
{$EXTERNALSYM MAPI_E_INSUFFICIENT_MEMORY}
MAPI_E_INSUFFICIENT_MEMORY = 5;
{$EXTERNALSYM MAPI_E_ACCESS_DENIED}
MAPI_E_ACCESS_DENIED = 6;
{$EXTERNALSYM MAPI_E_TOO_MANY_SESSIONS}
MAPI_E_TOO_MANY_SESSIONS = 8;
{$EXTERNALSYM MAPI_E_TOO_MANY_FILES}
MAPI_E_TOO_MANY_FILES = 9;
{$EXTERNALSYM MAPI_E_TOO_MANY_RECIPIENTS}
MAPI_E_TOO_MANY_RECIPIENTS = 10;
{$EXTERNALSYM MAPI_E_ATTACHMENT_NOT_FOUND}
MAPI_E_ATTACHMENT_NOT_FOUND = 11;
{$EXTERNALSYM MAPI_E_ATTACHMENT_OPEN_FAILURE}
MAPI_E_ATTACHMENT_OPEN_FAILURE = 12;
{$EXTERNALSYM MAPI_E_ATTACHMENT_WRITE_FAILURE}
MAPI_E_ATTACHMENT_WRITE_FAILURE = 13;
{$EXTERNALSYM MAPI_E_UNKNOWN_RECIPIENT}
MAPI_E_UNKNOWN_RECIPIENT = 14;
{$EXTERNALSYM MAPI_E_BAD_RECIPTYPE}
MAPI_E_BAD_RECIPTYPE = 15;
{$EXTERNALSYM MAPI_E_NO_MESSAGES}
MAPI_E_NO_MESSAGES = 16;
{$EXTERNALSYM MAPI_E_INVALID_MESSAGE}
MAPI_E_INVALID_MESSAGE = 17;
{$EXTERNALSYM MAPI_E_TEXT_TOO_LARGE}
MAPI_E_TEXT_TOO_LARGE = 18;
{$EXTERNALSYM MAPI_E_INVALID_SESSION}
MAPI_E_INVALID_SESSION = 19;
{$EXTERNALSYM MAPI_E_TYPE_NOT_SUPPORTED}
MAPI_E_TYPE_NOT_SUPPORTED = 20;
{$EXTERNALSYM MAPI_E_AMBIGUOUS_RECIPIENT}
MAPI_E_AMBIGUOUS_RECIPIENT = 21;
{$EXTERNALSYM MAPI_E_AMBIG_RECIP}
MAPI_E_AMBIG_RECIP = MAPI_E_AMBIGUOUS_RECIPIENT;
{$EXTERNALSYM MAPI_E_MESSAGE_IN_USE}
MAPI_E_MESSAGE_IN_USE = 22;
{$EXTERNALSYM MAPI_E_NETWORK_FAILURE}
MAPI_E_NETWORK_FAILURE = 23;
{$EXTERNALSYM MAPI_E_INVALID_EDITFIELDS}
MAPI_E_INVALID_EDITFIELDS = 24;
{$EXTERNALSYM MAPI_E_INVALID_RECIPS}
MAPI_E_INVALID_RECIPS = 25;
{$EXTERNALSYM MAPI_E_NOT_SUPPORTED}
MAPI_E_NOT_SUPPORTED = 26;
{ Delphi wrapper calls around Simple MAPI }
function MapiLogOn(ulUIParam: Cardinal; lpszProfileName: LPSTR;
lpszPassword: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
lplhSession: PLHANDLE): Cardinal;
function MapiLogOff(lhSession: LHANDLE; ulUIParam: Cardinal; flFlags: FLAGS;
ulReserved: Cardinal): Cardinal;
function MapiSendMail(lhSession: LHANDLE; ulUIParam: Cardinal;
var lpMessage: TMapiMessage; flFlags: FLAGS; ulReserved: Cardinal): Cardinal;
function MapiSendDocuments(ulUIParam: Cardinal; lpszDelimChar: LPSTR;
lpszFilePaths: LPSTR; lpszFileNames: LPSTR; ulReserved: Cardinal): Cardinal;
function MapiFindNext(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszMessageType: LPSTR; lpszSeedMessageID: LPSTR; flFlags: FLAGS;
ulReserved: Cardinal; lpszMessageID: LPSTR): Cardinal;
function MapiReadMail(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszMessageID: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
var lppMessage: PMapiMessage): Cardinal;
function MapiSaveMail(lhSession: LHANDLE; ulUIParam: Cardinal;
var lpMessage: TMapiMessage; flFlags: FLAGS; ulReserved: Cardinal;
lpszMessageID: LPSTR): Cardinal;
function MapiDeleteMail(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszMessageID: LPSTR; flFlags: FLAGS;
ulReserved: Cardinal): Cardinal;
function MapiFreeBuffer(pv: Pointer): Cardinal;
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;
function MapiDetails(lhSession: LHANDLE; ulUIParam: Cardinal;
var lpRecip: TMapiRecipDesc; flFlags: FLAGS;
ulReserved: Cardinal): Cardinal;
function MapiResolveName(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszName: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
var lppRecip: PMapiRecipDesc): Cardinal;
var
MAPIDLL: string = 'MAPI32.DLL';
implementation
var
MAPIModule: HModule = 0;
LogOn: TFNMapiLogOn = nil;
LogOff: TFNMapiLogOff = nil;
SendMail: TFNMapiSendMail = nil;
SendDocuments: TFNMapiSendDocuments = nil;
FindNext: TFNMapiFindNext = nil;
ReadMail: TFNMapiReadMail = nil;
SaveMail: TFNMapiSaveMail = nil;
DeleteMail: TFNMapiDeleteMail = nil;
FreeBuffer: TFNMapiFreeBuffer = nil;
Address: TFNMapiAddress = nil;
Details: TFNMapiDetails = nil;
ResolveName: TFNMapiResolveName = nil;
var
MAPIChecked: Boolean = False;
procedure InitMapi;
var
OSVersionInfo: TOSVersionInfo;
hkWMS: HKEY;
MAPIValueSize: Longint;
MAPIValueBuf: array[0..8] of char;
rType: Longint;
begin
if not MAPIChecked then
begin
MAPIChecked := True;
MAPIModule := 0;
OSVersionInfo.dwOSVersionInfoSize := SizeOf(OSVersionInfo);
GetVersionEx(OSVersionInfo);
if (OSVersionInfo.dwMajorVersion > 3) or
((OSVersionInfo.dwMajorVersion = 3) and
(OSVersionInfo.dwMinorVersion > 51)) then
begin
MAPIValueSize := sizeof(MAPIValueBuf);
if RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows Messaging Subsystem',
0, KEY_READ, hkWMS) <> ERROR_SUCCESS then Exit;
if RegQueryValueEx(hkWMS, 'MAPI', nil, @rType, @MAPIValueBuf,
@MAPIValueSize) <> ERROR_SUCCESS then Exit;
RegCloseKey(hkWMS);
if not ((MAPIValueBuf[0] = '1') and (MAPIValueBuf[1] = #0)) then Exit;
end
else if GetProfileInt('Mail', 'MAPI', 0) = 0 then Exit;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
end;
end;
function MapiLogOn(ulUIParam: Cardinal; lpszProfileName: LPSTR;
lpszPassword: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
lplhSession: PLHANDLE): Cardinal;
begin
InitMapi;
if @LogOn = nil then
@LogOn := GetProcAddress(MAPIModule, 'MAPILogon');
if @LogOn <> nil then
Result := LogOn(ulUIParam, lpszProfileName, lpszPassword, flFlags,
ulReserved, lplhSession)
else Result := 1;
end;
function MapiLogOff(lhSession: LHANDLE; ulUIParam: Cardinal; flFlags: FLAGS;
ulReserved: Cardinal): Cardinal;
begin
InitMapi;
if @LogOff = nil then
@LogOff := GetProcAddress(MAPIModule, 'MAPILogoff');
if @LogOff <> nil then
Result := LogOff(lhSession, ulUIParam, flFlags, ulReserved)
else Result := 1;
end;
function MapiSendMail(lhSession: LHANDLE; ulUIParam: Cardinal;
var lpMessage: TMapiMessage; flFlags: FLAGS; ulReserved: Cardinal): Cardinal;
begin
InitMapi;
if @SendMail = nil then
@SendMail := GetProcAddress(MAPIModule, 'MAPISendMail');
if @SendMail <> nil then
Result := SendMail(lhSession, ulUIParam, lpMessage, flFlags, ulReserved)
else Result := 1;
end;
function MapiSendDocuments(ulUIParam: Cardinal; lpszDelimChar: LPSTR;
lpszFilePaths: LPSTR; lpszFileNames: LPSTR;
ulReserved: Cardinal): Cardinal;
begin
InitMapi;
if @SendDocuments = nil then
@SendDocuments := GetProcAddress(MAPIModule, 'MAPISendDocuments');
if @SendDocuments <> nil then
Result := SendDocuments(ulUIParam, lpszDelimChar, lpszFilePaths,
lpszFileNames, ulReserved)
else Result := 1;
end;
function MapiFindNext(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszMessageType: LPSTR; lpszSeedMessageID: LPSTR; flFlags: FLAGS;
ulReserved: Cardinal; lpszMessageID: LPSTR): Cardinal;
begin
InitMapi;
if @FindNext = nil then
@FindNext := GetProcAddress(MAPIModule, 'MAPIFindNext');
if @FindNext <> nil then
Result := FindNext(lhSession, ulUIParam, lpszMessageType,
lpszSeedMessageID, flFlags, ulReserved, lpszMessageID)
else Result := 1;
end;
function MapiReadMail(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszMessageID: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
var lppMessage: PMapiMessage): Cardinal;
begin
InitMapi;
if @ReadMail = nil then
@ReadMail := GetProcAddress(MAPIModule, 'MAPIReadMail');
if @ReadMail <> nil then
Result := ReadMail(lhSession, ulUIParam, lpszMessageID, flFlags,
ulReserved, lppMessage)
else Result := 1;
end;
function MapiSaveMail(lhSession: LHANDLE; ulUIParam: Cardinal;
var lpMessage: TMapiMessage; flFlags: FLAGS; ulReserved: Cardinal;
lpszMessageID: LPSTR): Cardinal;
begin
InitMapi;
if @SaveMail = nil then
@SaveMail := GetProcAddress(MAPIModule, 'MAPISaveMail');
if @SaveMail <> nil then
Result := SaveMail(lhSession, ulUIParam, lpMessage, flFlags, ulReserved,
lpszMessageID)
else Result := 1;
end;
function MapiDeleteMail(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszMessageID: LPSTR; flFlags: FLAGS;
ulReserved: Cardinal): Cardinal;
begin
InitMapi;
if @DeleteMail = nil then
@DeleteMail := GetProcAddress(MAPIModule, 'MAPIDeleteMail');
if @DeleteMail <> nil then
Result := DeleteMail(lhSession, ulUIParam, lpszMessageID, flFlags,
ulReserved)
else Result := 1;
end;
function MapiFreeBuffer(pv: Pointer): Cardinal;
begin
InitMapi;
if @FreeBuffer = nil then
@FreeBuffer := GetProcAddress(MAPIModule, 'MAPIFreeBuffer');
if @FreeBuffer <> nil then
Result := FreeBuffer(pv)
else Result := 1;
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
InitMapi;
if @Address = nil then
@Address := GetProcAddress(MAPIModule, 'MAPIAddress');
if @Address <> nil then
Result := Address(lhSession, ulUIParam, lpszCaption, nEditFields,
lpszLabels, nRecips, lpRecips, flFlags, ulReserved, lpnNewRecips,
lppNewRecips)
else Result := 1;
end;
function MapiDetails(lhSession: LHANDLE; ulUIParam: Cardinal;
var lpRecip: TMapiRecipDesc; flFlags: FLAGS; ulReserved: Cardinal): Cardinal;
begin
InitMapi;
if @Details = nil then
@Details := GetProcAddress(MAPIModule, 'MAPIDetails');
if @Details <> nil then
Result := Details(lhSession, ulUIParam, lpRecip, flFlags, ulReserved)
else Result := 1;
end;
function MapiResolveName(lhSession: LHANDLE; ulUIParam: Cardinal;
lpszName: LPSTR; flFlags: FLAGS; ulReserved: Cardinal;
var lppRecip: PMapiRecipDesc): Cardinal;
begin
InitMapi;
if @ResolveName = nil then
@ResolveName := GetProcAddress(MAPIModule, 'MAPIResolveName');
if @ResolveName <> nil then
Result := ResolveName(lhSession, ulUIParam, lpszName, flFlags,
ulReserved, lppRecip)
else Result := 1;
end;
initialization
finalization
if MAPIModule <> 0 then FreeLibrary(MAPIModule);
end.