1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| unit EnvoiMailAvecClientMessagerie;
interface
Uses
Windows, SysUtils, Classes, Controls, Forms, StdCtrls, MAPI, Buttons, Dialogs,StrUtils;
Type
TMapiFiles = Array Of TMapiFileDesc;
TFilePath = Array[0..MAX_PATH] Of AnsiChar;
PFilePath = ^TFilePath;
TFileName = Array[0..MAX_PATH] Of AnsiChar;
PFileName = ^TFileName;
MapiInfos = Packed Record
ToAddress : String;
Subject : String;
Body : String;
AttachedFiles : TStrings;
End;
Procedure sendMail2(Infos : MapiInfos; liste, listeCc : tstrings);
implementation
Procedure sendMail2(Infos : MapiInfos; liste, listeCc : tstrings);
// Construction du mail
Var
Files: TMapiFiles;
MapiMessage: TMapiMessage;
ToDesc: array of TMapiRecipDesc;
MError: Cardinal;
I: Integer;
Flags: Cardinal;
bou,bou1 : integer;
S: AnsiString;
Begin
ZeroMemory(@Files, SizeOf(Files));
ZeroMemory(@ToDesc, SizeOf(ToDesc));
SetLength(ToDesc,liste.Count+listeCc.Count);
If Infos.AttachedFiles <> nil Then
Begin
SetLength(Files, Infos.AttachedFiles.count); // la taille est alloué une seule fois
For I := 0 To Infos.AttachedFiles.count-1 do
Begin
Files[I].ulReserved := 0;
Files[I].flFlags := MAPI_OLE_STATIC;
Files[I].nPosition := Length(Infos.Body) - 1;
S := AnsiString(Infos.AttachedFiles[I]);
Files[I].lpszPathName := StrNew(PAnsiChar(S));
S := AnsiString(ExtractFileName(Infos.AttachedFiles[I]));
Files[I].lpszFileName := StrNew(PAnsiChar(S));
Files[I].lpFileType := Nil;
End;
End;
///////////////////////////////////////////////////////////////////////////////
for bou := 0 to liste.Count-1 do
begin
With ToDesc[bou] Do
Begin
ulReserved := 0;
ulRecipClass := MAPI_TO;
lpszName := strnew(PAnsiChar(AnsiString(Liste[Bou])));
lpszAddress := Nil;
ulEIDSize := 0;
lpEntryID := Nil;
End;
end;
for bou1 := liste.Count to (liste.Count+listeCc.Count)-1 do
begin
With ToDesc[bou1] Do
Begin
ulReserved := 0;
ulRecipClass := MAPI_CC;
lpszName := strnew(PAnsiChar(AnsiString(listeCc[Bou1-liste.Count])));
lpszAddress := Nil;
ulEIDSize := 0;
lpEntryID := Nil;
End;
end;
With MapiMessage Do
Begin
ulReserved := 0;
lpszSubject := PAnsiChar(AnsiString(Infos.Subject));
lpszMessageType := Nil;
lpszDateReceived := Nil;
lpszConversationID := Nil;
flFlags := MAPI_SENT;
lpOriginator := Nil;
////////////////////////////////////////////////////////////////////////////////
If Trim(liste[0]) <> '' Then
Begin
nRecipCount := liste.Count+listecc.Count;
//nRecipCount:=5;
lpRecips := @ToDesc[0];
Flags := 0;
End
Else
Begin
nRecipCount := 0;
lpRecips := Nil;
Flags := MAPI_DIALOG;
End;
////////////////////////////////////////////////////////////////////////////////
nFileCount := High(Files) + 1;
lpFiles := Pointer(Files);
lpszNoteText := PAnsiChar(AnsiString(Infos.Body));
End;
MError := MapiSendMail(0, Application.Handle, MapiMessage, Flags, 0);
//libération de la memoire
for I := 0 to High(Files) do
begin
StrDispose(Files[I].lpszPathName);
StrDispose(Files[I].lpszFileName);
end;
If MError <> 0 Then MessageDlg('Le message n''a pas été envoyé', mtError, [mbOK], 0);
End;
end. |
Partager