IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

envoyer un mail (EIdSMTPReplyError)


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 130
    Points : 46
    Points
    46
    Par défaut envoyer un mail (EIdSMTPReplyError)
    Bonjour
    Je voudrais envoyer un mail avec les composants Indy.
    J'ai ajouté à la form les composants idsmptp et idmessage
    puis j'ai utilisé le code suivant trouvé sur le net :

    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
     
    function send_mail():Boolean;
    var
      FileName : String;
    begin
      try
        Result := False;
        //FileName := 'myfile.txt';
        //Setup SMTP
        Form1.IdSMTP1 := Form1.IdSMTP1.Create(nil);
        Form1.IdSMTP1.Host := 'smtp.live.com';
        Form1.IdSMTP1.Port := 587; //Default email port
        Form1.IdSMTP1.Username := 'mon_mail@hotmail.fr'; // SMTP user name
        Form1.IdSMTP1.Password := 'secret'; //
        Form1.IdMEssage1.From.Address := 'mon_mail@hotmail.fr';
        Form1.IdMEssage1.Recipients.EMailAddresses :=  'mon_mail@hotmail.fr'; 
        Form1.IdMEssage1.Subject := 'Test Email from Delphi XE2';
        Form1.IdMEssage1.Body.Text := 'Hi! This is test email from delphi XE2';
        //Attach a file
        //if FileExists(FileName) then TIdAttachmentFile.Create(MailMessage.MessageParts, FileName);
        //Send email
        try
          try
            Form1.IdSMTP1.Connect;
            Form1.IdSMTP1.Send(Form1.IdMEssage1);
            Result := True;
          except
            on E:Exception do
            begin
              ShowMessage('Cannot send E-Mail: ' + E.Message);
              Result := False;
            end;
          end;
        finally
          if Form1.IdSMTP1.Connected then Form1.IdSMTP1.Disconnect;
      end;
      except
        on E : Exception do
        begin
          ShowMessage('Error in the function SendEmailDelphi: ' + E.Message);
          Result := False;
        end;
      end;
    end;
    Par souci de test, j'ai forcé les variables selon mes données personnelles. J'ai coupé l'antivirus/firewall pour éviter de poser problème avec les ports.
    "smtp.live.com" est lié à hotmail.com
    le port 587 aussi.

    A l'exécution, j'ai ce bug :
    Project1.exe raised exception class EIdSMTPReplyError with message ''.

    Quelqu'un a une idée?

  2. #2
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    En pas à pas tu vois l'erreur a quelle moment ?
    Pourquoi utiliser les composants de ta "Form1" ?

    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
    function send_mail():Boolean;
    var
      FileName : String;
      idSMTP1 : TIdSMTP;
      idMessage1 : TIdMessage;
    begin
    	try
    		// initialisation des variables
    		Result := False;
    		idSMTP1    := TIdSMTP.Create(nil);
    		idMessage1 := TIdMessage.Create(nil);
     
    		try
    			IdSMTP1.Host := 'smtp.live.com';
    			IdSMTP1.Port := 587; //Default email port
    			IdSMTP1.Username := 'mon_mail@hotmail.fr'; // SMTP user name
    			IdSMTP1.Password := 'secret'; //
    			IdMEssage1.From.Address := 'mon_mail@hotmail.fr';
    			IdMEssage1.Recipients.EMailAddresses :=  'mon_mail@hotmail.fr';
    			IdMEssage1.Subject := 'Test Email from Delphi XE2';
    			IdMEssage1.Body.Text := 'Hi! This is test email from delphi XE2';
     
    			try
    				IdSMTP1.Connect;
    				IdSMTP1.Send(IdMEssage1);
    				Result := True;
    			except
    				on E:Exception do
    			begin
    				ShowMessage('Cannot send E-Mail: ' + E.Message);
    				Result := False;
    			end;
    		finally
    			IdSMTP1.Disconnect;
    		end;
    	finally
    		FreeAndNil(idSMTP1);
    		FreeAndNil(idMessage1);
    	end;
    end;

  3. #3
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 949
    Points
    3 949
    Par défaut
    Salut

    2 choses:

    - ta procédure Send_mail devrait manifestement être une méthode de la classe TForm1, ce n'est parce que Delphi permet de coder "bêtement" qu'il faut en abuser. En effet, tu lies ta procédure avec une référence en particulier Form1, sur le fond c'est pas top.

    -je ne connais pas les composants Indy pour te renseigner mais examine le code de ces composants pour savoir où est levée l'exception. Cela te donnera sans doute des indication sur ce qui se passe.

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 130
    Points : 46
    Points
    46
    Par défaut
    L'erreur apparaît à la ligne :

    IdSMTP1.Send(IdMEssage1);

    Si j'ai écrit Form1. c'est parce que la fonction se trouvait sur une autre unit.
    J'ai cependant testé la fonction dans l'unit1 (La Form), donc sans les Form1.IdSMTP1.Host:= ... Form1.IdSMTP1.Password... ect : il y a toujours le même bug au même endroit

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 300
    Points
    11 300
    Billets dans le blog
    6
    Par défaut
    regarde ici : http://forums2.atozed.com/viewtopic.php?f=7&t=26261 si tu as une piste pour mieux cerner le problème.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 949
    Points
    3 949
    Par défaut
    Si j'ai écrit Form1. c'est parce que la fonction se trouvait sur une autre unit.
    A minima, passe cette référence d'objet en paramètre car tu lies ton code à une variable globale, cela pourra être une source de problème plus tard, autant t'en débarrasser tout de suite.
    il y a toujours le même bug au même endroit
    C'est pas surprenant...

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

Discussions similaires

  1. envoyer un mail avec mon programme
    Par shrek dans le forum C++Builder
    Réponses: 8
    Dernier message: 06/12/2006, 12h27
  2. [VB6] Comment envoyer un mail HTML par Winsocks ?
    Par hedgehog dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 07/05/2004, 10h04
  3. [Debutant(e)]envoyer un mail en jsp
    Par SegmentationFault dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 19/01/2004, 18h28
  4. configurer sql pour envoyer des mails
    Par arwen dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 29/07/2003, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo