Unit smapi

simple MAPI definitions } { Version 1.00.00 : 16 bit mapi.h partially converted by Keith Darragh, (c) 1995 SWIFTSOFT Version 2.00.00 : extended and adapted to 32 bit by Danny Heijl, (c) 1996 CEVI VZW also put in a separate "header" file, "smapi.pas" Version 2.00.0a : added DeletMail for completeness, Danny Heijl Dec 1996 Version 2.00.0b : added "Address" (select addresses), Rudy Claasen, Jan 1997 added '.DLL' to 'MAPI32' for Windows NT users, Danny Heijl, Jan 1997 Danny.Heijl@cevi.be Version 2.01.00 : Changes by Stefan Hoffmeister (Stefan.Hoffmeister@Uni-Passau.de): - rework the implementation part to allow dynamic linking - add a function (MAPIavailable) that indicates whether MAPI services are available. - add EMAPIdllerror exception (Danny) Version 2.02.00 : (Stefan) Changes by Stefan Hoffmeister (Stefan.Hoffmeister@Uni-Passau.de): - changed loading strategy a bit - suppressing system error messages that DLL was not found - added check in accordance with MS MAPI docs whether MAPI is installed on the system (SMAPI.PAS). This is YET another safeguard Version 2.02.0a : (Danny) A minor bugfix in the 2.02.00 code of Stefan. Hence the 'MsgIdSize' const. Version 2.03.00 : (Stefan) Incorporate additions to MapiSaveMail by Daniel Easton Version 2.04.00 : (Stefan) Rewrite of MAPI detection logic - triggered by code sent in by John Hall Logic now mirrors current Delphi 3.02 implementation closely

Classes

Functions

MAPIAddress -
MAPIavailable -
MAPIDeleteMail -
MAPIFindNext - Declare calls to MAPI.
MAPIFreeBuffer -
MAPILogoff -
MAPILogon -
MAPIReadMail -
MAPIResolveName -
MAPISaveMail -
MAPISendMail -

Types

DWORD
LHANDLE
lpLHANDLE
lpMapiFileDesc
lpMapiMessage
lpMapiRecipDesc
lppMapiRecipDesc
lpULONG
LPVOID
SString
TlppMapiMessage
TMapiFileDesc
TMapiMessage
TMapiRecipDesc
UINT
ULONG

Constants

MAPI_AB_NOMODIFY
MAPI_BCC
MAPI_BODY_AS_FILE
MAPI_CC
MAPI_DIALOG
MAPI_ENVELOPE_ONLY
MAPI_E_ACCESS_DENIED
MAPI_E_AMBIGUOUS_RECIPIENT
MAPI_E_ATTACHMENT_NOT_FOUND
MAPI_E_ATTACHMENT_OPEN_FAILURE
MAPI_E_ATTACHMENT_WRITE_FAILURE
MAPI_E_BAD_RECIPTYPE
MAPI_E_DISK_FULL
MAPI_E_FAILURE
MAPI_E_INSUFFICIENT_MEMORY
MAPI_E_INVALID_EDITFIELDS
MAPI_E_INVALID_MESSAGE
MAPI_E_INVALID_RECIPS
MAPI_E_INVALID_SESSION
MAPI_E_LOGIN_FAILURE
MAPI_E_MESSAGE_IN_USE
MAPI_E_NETWORK_FAILURE
MAPI_E_NOT_SUPPORTED
MAPI_E_NO_MESSAGES
MAPI_E_TEXT_TOO_LARGE
MAPI_E_TOO_MANY_FILES
MAPI_E_TOO_MANY_RECIPIENTS
MAPI_E_TOO_MANY_SESSIONS
MAPI_E_TYPE_NOT_SUPPORTED
MAPI_E_UNKNOWN_RECIPIENT
MAPI_FORCE_DOWNLOAD
MAPI_GUARANTEE_FIFO
MAPI_LOGON_UI
MAPI_NEW_SESSION
MAPI_OLE
MAPI_OLE_STATIC
MAPI_ORIG
MAPI_PEEK
MAPI_RECEIPT_REQUESTED
MAPI_SENT
MAPI_SUPPRESS_ATTACH
MAPI_TO
MAPI_UNREAD
MAPI_UNREAD_ONLY
MAPI_USER_ABORT
MsgIdSize
SUCCESS_SUCCESS

Variables


Functions


Function MAPIAddress(lhSession: LHANDLE; ulUIParam: ULONG; lpszCaption: PChar; nEditFields: ULONG; lpszLabels: PChar; nRecips: ULONG; var lpRecips: TMapiRecipDesc; flFlags: ULONG; ulReserved: ULONG; lpnNewRecips: lpULONG; var lppNewRecips: lpMapiRecipDesc): ULONG;


Function MAPIavailable: boolean;


Function MAPIDeleteMail(lhSession : LHANDLE; ulUIParam : ULONG; lpszMessageID : PChar; flFlags : ULONG; ulReserved : ULONG) : ULONG;


Function MAPIFindNext(lhSession : LHANDLE; ulUIParam : ULONG; lpszMessageType : PChar; lpszSeedMessageID: PChar; flFlags : ULONG; ulReserved : ULONG; lpszMessageID : PChar) : ULONG ;

Declare calls to MAPI.DLL

declare the functions themselves


Function MAPIFreeBuffer(pv : LPVOID) : ULONG;


Function MAPILogoff(lhSession : LHANDLE; ulUIParam : ULONG; flFlags : ULONG; ulReserved : ULONG) : ULONG ;


Function MAPILogon(ulUIParam : ULONG; lpszName : PChar; lpszPassword: PChar; flFlags : ULONG; ulReserved : ULONG; lplhSession : LPLHANDLE) : ULONG;


Function MAPIReadMail(lhSession : LHANDLE; ulUIParam : ULONG; lpszMessageID : PChar; flFlags : ULONG; ulReserved : ULONG; lpMessage : lpMapiMessage) : ULONG;


Function MAPIResolveName(lhSession : LHANDLE; ulUIParam : ULONG; lpszName : Pchar; flFlags : ULONG; ulReserved: ULONG; lppRecips : lppMapiRecipDesc) : ULONG;


Function MAPISaveMail(lhSession : LHANDLE; ulUIParam : ULONG; lpMessage : lpMapiMessage; flFlags : ULONG; ulReserved : ULONG; lpszMessageID : PChar) : ULONG;


Function MAPISendMail(lhSession : LHANDLE; ulUIParam : ULONG; lpMessage : lpMapiMessage; flFlags : ULONG; ulReserved : ULONG) : ULONG;


Types


DWORD     =  Longint

LHANDLE   =  LongInt

lpLHANDLE = ^LHANDLE

lpMapiFileDesc = ^TMapiFileDesc
message id size, large enough for Unicode should MAPI use it } {-----------------------------------} { MAPI File attachment information. } {-----------------------------------
lpMapiMessage = ^TMapiMessage
---------------------------} { MAPI message information. } {---------------------------
lpMapiRecipDesc = ^TMapiRecipDesc
-----------------------------} { MAPI recipient information. } {-----------------------------
lppMapiRecipDesc = ^lpMapiRecipDesc

lpULONG   = ^LongInt

LPVOID    =  Pointer

SString   = ShortString
.DEFINE DEBUG} {$IFNDEF DEBUG} {$D-} {$L-
TlppMapiMessage = ^lpMapiMessage

TMapiFileDesc = record
ulReserved : ULONG;
flFlags : ULONG;
nPosition : ULONG;
lpszPathName : PChar;
lpszFileName : PChar;
lpFileType : Pointer;
end;

TMapiMessage = record
ulReserved : ULONG;
lpszSubject : PChar;
lpszNoteText : PChar;
lpszMessageType : PChar;
lpszDateReceived : PChar;
lpszConversationID : PChar;
flFlags : ULONG;
lpOriginator : lpMapiRecipDesc;
nRecipCount : ULONG;
lpRecips : lpMapiRecipDesc;
nFileCount : ULONG;
lpFiles : lpMapiFileDesc;
end;

TMapiRecipDesc = record
ulReserved : ULONG;
ulRecipClass : ULONG;
lpszName : PChar;
lpszAddress : PChar;
ulEIDSize : ULONG;
lpEntryID : Pointer;
end;

UINT      =  Integer
------------------} { MAPI data types. } {------------------
ULONG     =  LongInt

Constants

MAPI_AB_NOMODIFY = $0400

Save body as first attachment

MAPI_BCC = 3

Recipient is copy recipient.

MAPI_BODY_AS_FILE = $0200

Guarantee FIFO MAPIFindNext

MAPI_CC = 2

Recipient is primary recipient.

MAPI_DIALOG = $0008

Don't get default if available.

MAPI_ENVELOPE_ONLY = $0040

Only unread messages

MAPI_E_ACCESS_DENIED = 6

MAPI_E_AMBIGUOUS_RECIPIENT = 21

MAPI_E_ATTACHMENT_NOT_FOUND = 11

MAPI_E_ATTACHMENT_OPEN_FAILURE = 12

MAPI_E_ATTACHMENT_WRITE_FAILURE = 13

MAPI_E_BAD_RECIPTYPE = 15

MAPI_E_DISK_FULL = 4

MAPI_E_FAILURE = 2

MAPI_E_INSUFFICIENT_MEMORY = 5

MAPI_E_INVALID_EDITFIELDS = 24

MAPI_E_INVALID_MESSAGE = 17

MAPI_E_INVALID_RECIPS = 25

MAPI_E_INVALID_SESSION = 19

MAPI_E_LOGIN_FAILURE = 3

MAPI_E_MESSAGE_IN_USE = 22

MAPI_E_NETWORK_FAILURE = 23

MAPI_E_NOT_SUPPORTED = 26

MAPI_E_NO_MESSAGES = 16

MAPI_E_TEXT_TOO_LARGE = 18

MAPI_E_TOO_MANY_FILES = 9

MAPI_E_TOO_MANY_RECIPIENTS = 10

MAPI_E_TOO_MANY_SESSIONS = 8

MAPI_E_TYPE_NOT_SUPPORTED = 20

MAPI_E_UNKNOWN_RECIPIENT = 14

MAPI_FORCE_DOWNLOAD = $1000

Header and body, no files

MAPI_GUARANTEE_FIFO = $0100

Don't mark message as read

MAPI_LOGON_UI = $0001

MAPI_NEW_SESSION = $0002

Display logon UI

MAPI_OLE = $0001

Force message download from server

MAPI_OLE_STATIC = $0002

Set if attachment is an OLE Object

MAPI_ORIG = 0

-----------------------------} { MAPI constants information. } {-----------------------------

MAPI_PEEK = $0080

Only header information

MAPI_RECEIPT_REQUESTED = $0002

MAPI_SENT = $0004

MAPI_SUPPRESS_ATTACH = $0800

Don't modify PAB entries

MAPI_TO = 1

Recipient is message originator.

MAPI_UNREAD = $0001

Recipient is blind-copy recipient.

MAPI_UNREAD_ONLY = $0020

Prompt to resolve ambig. names

MAPI_USER_ABORT = 1

MsgIdSize = 520

SUCCESS_SUCCESS = 0

Set if attachment is Static OLE } { MAPI Error codes.

Variables