Bonjour

Je voudrais envoyer des mails à partir de mon application, pour cela j'ai utilisé les composants Indy. Le code est assez simple et très classique je me suis inspiré de la FAQ Delphi mais je ne parviens toujours pas à envoyer de mails. Quand je clique sur le bouton envoyer, l'application prend un moment (un peu plus de 1 mn) puis me fait sortir le message "connection closed gracefully".

  • La 1ère question est tout naturellement pourquoi ai-je cette erreur ? Je me suis documenté mais toute les modifications que j'ai faite ont aboutit au même message.
  • ma 2ème question concerne le temps de réponse qui me parait excessivement long !



Voici le code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
procedure Tfm_ActivexMEDIC.RzDialogButtons1ClickOk(Sender: TObject);
var
  IdMessage: TIdMessage;
  IdSMTP: TIdSMTP;
  IMessage: TStrings;
  SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
 
  IdMessage := TIdMessage.Create(nil); //création dynamique du composant
 
  IdMessage.From.Address := 'monmail@gmail.com';
 
 
  IdMessage.Subject := 'Test';
 
  IdMessage.ContentType := 'multipart/alternative'; //Message 'découpé' en plusieurs parties
 
  IMessage := TStringList.Create;
  IMessage.Add('Bonjour comment vous allez ?'); //par exemple... il faut juste que ce soit un TStrings !
 
  //On passe ensuite à l'envoi du message:
  IdSMTP := TIdSMTP.Create(nil) ; //Création dynamique du composant
  SSLHandler:= TIdSSLIOHandlerSocketOpenSSL.Create(fm_ActivexMEDIC);
  IdSMTP.IOHandler:= SSLHandler;
  IdSMTP.Port := 465; //Le port SMTP standard... ou le 587
  IdSMTP.Host := 'smtp.gmail.com';  //Le serveur auquel se connecter
  IdSMTP.UseTLS:= utUseExplicitTLS;
 
  //Ensuite on se connecte et on envoit le message, en gérant les erreurs, tant qu'à faire !
  try
    try
      IdSMTP.Connect;
      IdSMTP.Send(IdMessage);
    except
      on e : EIdConnClosedGracefully do
      begin
          ShowMessage(e.Message);
      end;
    end;
  finally
    IdSMTP.Disconnect;
    IdSMTP.Free;
    IdMessage.Free;
  end;
end;
Toute idée est la bienvenue.
Merci d'avance.