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
| function TForm2.ySendSMTP(ParamDataMessage : TGestionnaireMessage) : boolean;
var
cCursor : TCursor;
iCompte : integer;
iNbMail, iMail, iMailOk : integer;
UnEmail : TEmail;
idSMTP : TIdSMTP;
idMessage : TIdMessage;
idSSLIO : TIdSSLIOHandlerSocketOpenSSL;
bContinue : boolean;
bPremier : boolean;
sException : string;
FormProgress : TfvEtat;
ListEmail : TList<TEmail>;
ListDataMessage : TList<TDataMessage>;
i : integer;
begin
Result := False;
cCursor := Screen.Cursor;
try
Screen.Cursor := crHourGlass;
// initialisations des composants indy
idSMTP := TIdSMTP.Create(nil);
idMessage := TIdMessage.Create(nil);
idSSLIO := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
// paramétrage de la connexion SMTP
idSMTP.AuthType := satDefault;
idSMTP.Host := 'smtp@gmail.com';
idSMTP.Port := '25';
if (sIdentifiant <> '') and
(sPwd <> '') then
begin
idSSLIO.SSLOptions.Method := sslvTLSv1;
idSMTP.Username := sIdentifiant;
idSMTP.Password := sPwd;
IdSMTP.IOHandler := idSSLIO;
idSMTP.UseTLS := utUseExplicitTLS;
end;
// connexion
try
idSMTP.Connect;
except
on e : EIdSocketError do
begin
ShowMessage('SocketError : ' + e.Message);
bContinue := False;
end;
on e : SysUtils.Exception do
begin
ShowMessage('Erreur de connexion au serveur SMTP : ' + e.Message);
bContinue := False;
end;
end;
if bContinue then
begin
idMessage.Clear;
// initialisation des adresses (expediteur, destinataire, cc, cci)
idMessage.From.Text := sExpediteur;
idMessage.ReplyTo.Add.Address := sExpediteur;
for iCompte := 0 to UnEmail.slDestinataire.Count - 1 do
idMessage.Recipients.Add.Address := UnEmail.slDestinataire[iCompte];
// paramétrage du message
idMessage.Date := Now;
idMessage.Priority := mpNormal;
idMessage.Subject := sObjet;
// corps et des pièces jointes du message
idMessage.Body.Text := UnEmail.sMessage
for iCompte := 0 to ListePieceJointe.Count - 1 do
if not ListePieceJointe[iCompte].bModeleFusion then
TIdAttachmentFile.Create(idMessage.MessageParts, ListePieceJointe[iCompte].sCheminDoc);
try
idSMTP.Send(idMessage);
except
on e : EIdSMTPReplyError do
begin
ShowMessage('Erreur ' + e.Message);
end;
on e : SysUtils.Exception do
begin
ShowMessage('Erreur : ' + e.Message);
end
end;
end;
// déconnexion du serveur SMTP
if IdSMTP.Connected then
idSMTP.Disconnect();
except
on e : SysUtils.Exception do
begin
ShowMessage('Erreur : ' + e.Message);
end
end;
finally
DetruitObjet(idMessage);
DetruitObjet(idSSLIO);
DetruitObjet(idSMTP);
Screen.Cursor := cCursor;
end;
end; |
Partager