Via Cà Matta 2 - Peschiera Borromeo (MI)
+39 02 00704272
info@synaptica.info

TIP [DELPHI] – Invio di una mail utilizzando il protocollo MAPI

Digital Innovation Partner

TIP [DELPHI] – Invio di una mail utilizzando il protocollo MAPI

function SendEMail(Handle: THandle; Mail: TStrings): Cardinal;

type

TAttachAccessArray = array [0..0] of TMapiFileDesc;

PAttachAccessArray = ^TAttachAccessArray;

var

MapiMessage: TMapiMessage;

Receip: TMapiRecipDesc;

Attachments: PAttachAccessArray;

AttachCount: Integer;

i1: integer;

FileName: string;

dwRet: Cardinal;

MAPI_Session: Cardinal;

WndList: Pointer;

begin

dwRet := MapiLogon(Handle,

PChar(”),

PChar(”),

MAPI_LOGON_UI or MAPI_NEW_SESSION,

0, @MAPI_Session);

if (dwRet <> SUCCESS_SUCCESS) then

begin

MessageBox(Handle,

PChar(‘Error while trying to send email’),

PChar(‘Error’),

MB_ICONERROR or MB_OK);

end

else

begin

FillChar(MapiMessage, SizeOf(MapiMessage), #0);

Attachments := nil;

FillChar(Receip, SizeOf(Receip), #0);

if Mail.Values[‘to’] <> ” then

begin

Receip.ulReserved := 0;

Receip.ulRecipClass := MAPI_TO;

Receip.lpszName := StrNew(PChar(Mail.Values[‘to’]));

Receip.lpszAddress := StrNew(PChar(‘SMTP:’ + Mail.Values[‘to’]));

Receip.ulEIDSize := 0;

MapiMessage.nRecipCount := 1;

MapiMessage.lpRecips := @Receip;

end;

AttachCount := 0;

for i1 := 0 to MaxInt do

begin

if Mail.Values[‘attachment’ + IntToStr(i1)] = ” then

break;

Inc(AttachCount);

end;

if AttachCount > 0 then

begin

GetMem(Attachments, SizeOf(TMapiFileDesc) * AttachCount);

for i1 := 0 to AttachCount – 1 do

begin

FileName := Mail.Values[‘attachment’ + IntToStr(i1)];

Attachments[i1].ulReserved := 0;

Attachments[i1].flFlags := 0;

Attachments[i1].nPosition := ULONG($FFFFFFFF);

Attachments[i1].lpszPathName := StrNew(PChar(FileName));

Attachments[i1].lpszFileName :=

StrNew(PChar(ExtractFileName(FileName)));

Attachments[i1].lpFileType := nil;

end;

MapiMessage.nFileCount := AttachCount;

MapiMessage.lpFiles := @Attachments^;

end;

if Mail.Values[‘subject’] <> ” then

MapiMessage.lpszSubject := StrNew(PChar(Mail.Values[‘subject’]));

if Mail.Values[‘body’] <> ” then

MapiMessage.lpszNoteText := StrNew(PChar(Mail.Values[‘body’]));

WndList := DisableTaskWindows(0);

try

Result := MapiSendMail(MAPI_Session, Handle,

MapiMessage, MAPI_DIALOG, 0);

finally

EnableTaskWindows( WndList );

end;

for i1 := 0 to AttachCount – 1 do

begin

StrDispose(Attachments[i1].lpszPathName);

StrDispose(Attachments[i1].lpszFileName);

end;

if Assigned(MapiMessage.lpszSubject) then

StrDispose(MapiMessage.lpszSubject);

if Assigned(MapiMessage.lpszNoteText) then

StrDispose(MapiMessage.lpszNoteText);

if Assigned(Receip.lpszAddress) then

StrDispose(Receip.lpszAddress);

if Assigned(Receip.lpszName) then

StrDispose(Receip.lpszName);

MapiLogOff(MAPI_Session, Handle, 0, 0);

end;

End;

Esempio di utilizzo della funzione :


mail.values[‘to’] := InputBox(‘Inserire l”indirizzo di posta del destinatario’,’Inserire l”indirizzo di posta del destinatario’,”);

mail.values[‘subject’] := ‘Campagna : [‘ + InputBox(‘Nome Campagna’,’Nome Campagna’,”) + ‘]’;

ts.Add(‘[]’);

ts.Add(‘[]’);

ts.add(”);

ts.add(‘formato nome file : [DataOut_dd_mm_yy_ExportCount.zip]’);

ts.add(‘ – “DataOut” <-- costante nome '); ts.add(' - "dd_mm_yy" <-- formato data '); ts.add(' - "_ExportCount" <-- contatore di esportazione utile nel caso di molteplici invii dello stesso file '); mail.values['body'] := ts.Text; mail.values['attachment0'] := OutFileName + '.zip'; // mail.values['attachment1']:='C:\Test2.txt'; { TODO -oivan -cimportant : Inserire la procedura di gestione della mail } sendEMail(Application.Handle, mail);

Lascia un commento