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

C++ Discussion :

envoie mail avec C++ Builder (Erreur de socket n° 11001 Hôte non trouvé.)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 14
    Par défaut envoie mail avec C++ Builder (Erreur de socket n° 11001 Hôte non trouvé.)
    Bonsoir, j'ai un problème avec C++ Builder. Je souhaite envoyer des mail via une application or cela ne fonctionne pas.
    Composants de l'App:
    • 2x TEdit
    • 1x Button


    Voici mon code pour le moment :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    //---------------------------------------------------------------------------
     
    #include <fmx.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.fmx"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Edit1Click(TObject *Sender)
    {
        this->Edit1->SelectAll(); //Ergonomie
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Edit2Click(TObject *Sender)
    {
    	this->Edit2->SelectAll(); //Ergonomie
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     
    	this->IdMessage1->From->Text = "monmail@gmail.com"; //Fonctionne
    	this->IdMessage1->ReplyTo->EMailAddresses = "monmail@gmail.com"; //Fonctionne
    	this->IdMessage1->Recipients->EMailAddresses = "monmail@gmail.com"; //Fonctionne
    	this->IdMessage1->Subject = "Nouvelle demande de contact"; //Fonctionne
    	this->IdMessage1->Body->Add("Adresse mail: " +
    								this->Edit1->Text + "/n" +
    								"Sujet de la demande: " +
    								this->Edit2->Text); //Fonctionne
    	this->IdSMTP1->Username = "monmail@gmail.com"; //Fonctionne
    	this->IdSMTP1->Password = "MotDePasseDeMonMail"; //Fonctionne
    	this->IdSMTP1->Host = "smtp.gmail.com"; //"Fonctionne" (J'ai tester de changer les différents serveurs proposés par google)
    	this->IdSMTP1->Port = 25; //"//Fonctionne"
     
    	try
    	{
    		this->IdSMTP1->Connect(5000); //Erreur ici
    		this->IdSMTP1->Send(this->IdMessage1);
    		this->IdSMTP1->Disconnect();
    	}
    	catch(Exception &e)
    	{
    		ShowMessage (e.Message);
    	}
    }
    //---------------------------------------------------------------------------
    J'ai tester différentes méthode tel que changer de messagerie (orange, outlook) ensuite j'ai également un nom de domaine avec un hébergement mail alors j'ai tenter de l'utiliser (l'option sans SSL) et l'erreur reviens toujours.

    Erreur C++ Builder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Exception 'first chance' à $75A3C54F. Classe d'exception EIdSocketError avec un message
    'Erreur de socket n° 11001
    Hôte non trouvé.'.
    Processus Project1.exe (4368)
    Erreur dans l'App :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Erreur de socket n° 11001
    Hôte non trouvé.
    Edit: 30.03.2018 11:13 J'ai essayé avec un nouveau code toujours la même erreur.
    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
    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
     
    //---------------------------------------------------------------------------
     
    #include <fmx.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.fmx"
    #pragma resource ("*.Windows.fmx", _PLAT_MSWINDOWS)
    #pragma resource ("*.Surface.fmx", _PLAT_MSWINDOWS)
     
    TForm1 *Form1;
     
    void TForm1::Gmail(UnicodeString username,
    				  UnicodeString password,
    				  UnicodeString totarget,
    				  UnicodeString subject,
    				  UnicodeString body)
    {
    	TIdSSLIOHandlerSocketOpenSSL *SSL;
    	SSL = this->IdSSLIOHandlerSocketOpenSSL1;  // Renommer un composant
    	TIdMessage *DATA;
    	DATA = this->IdMessage1; //Renommer un composant
    	TIdSMTP *SMTP;
    	SMTP = this->IdSMTP1; //Renommer un composant
     
    	SSL->SSLOptions->Method = sslvTLSv1;
    	SSL->SSLOptions->Mode = sslmUnassigned;
    	SSL->SSLOptions->VerifyMode = (TIdSSLVerifyModeSet) 0;
     
    	DATA->From->Address = username;
    	DATA->Recipients->EMailAddresses = username;
    	DATA->Subject = subject;
    	DATA->Body->Text = body;
     
    	SMTP->IOHandler = SSL;
    	SMTP->Host = "smtp.gmail.com";
    	SMTP->Port = 465;
    	SMTP->Username = username;
    	SMTP->Password = password;
    	SMTP->UseTLS = utUseExplicitTLS;
     
    	SMTP->Connect(5000);
    	SMTP->Send(DATA);
    	SMTP->Disconnect();
     
    	SMTP->Free();
    	DATA->Free();
    	SSL->Free();
    }
     
     
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     
    //	this->IdMessage1->From->Text = "monmail@gmail.com";
    //	this->IdMessage1->ReplyTo->EMailAddresses = "monmail@gmail.com";
    //	this->IdMessage1->Recipients->EMailAddresses = "monmail@gmail.com";
    //	this->IdMessage1->Subject = this->Edit2->Text;
    //	this->IdMessage1->Body->Add("Nom: " +
    //								this->Edit1->Text +	"/n" +
    //								"Mail: " +
    //								this->Edit3->Text + "/n" +
    //								"Message: " +
    //								this->Edit4->Text);
    //
    //	this->IdSMTP1->AuthType=1;
    //	this->IdSMTP1->Username = "monmail@gmail.com";
    //	this->IdSMTP1->Password = "monpass"; //Mot de passe à mettre
    //	this->IdSMTP1->Host = "smtp.gmail.com";
    //	this->IdSMTP1->Port = 465;
    //	try
    //	{
    //		this->IdSMTP1->Connect(5000);
    //		this->IdSMTP1->Send(this->IdMessage1);
    //		this->IdSMTP1->Disconnect();
    //	}
    //	catch(Exception &e)
    //	{
    //		ShowMessage(e.Message);
    //	}
     
    	mail_username = "monmail@gmail.com";
    	mail_password = "monpass";
    	mail_to = "monmail@gmail.com";
    	mail_subject = this->Edit2->Text;
    	mail_body = this->Edit4->Text;
     
    	try
    	{
    		Gmail(mail_username, mail_password, mail_to, mail_subject, mail_body);
    	}
    	catch(Exception &e)
    	{
    		ShowMessage(e.Message);
        }
    }
    //---------------------------------------------------------------------------
    Merci de votre aide j'espère que vous aurez une idée d'où le problème pourrait venir.

    Cordialement,
    Lucas.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Il y a encore 2 ans j'avais du activer un paramètre sur gmail pour autoriser une app externe à envoyer des emails depuis une adresse gmail. As-tu fait cette manip' ? Ou cela a-t-il été retiré ? (j'en doute)
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 14
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Il y a encore 2 ans j'avais du activer un paramètre sur gmail pour autoriser une app externe à envoyer des emails depuis une adresse gmail. As-tu fait cette manip' ? Ou cela a-t-il été retiré ? (j'en doute)
    Bonsoir, merci de votre réponse, oui j'ai bien activer le protocole IMAP dans les paramètres Gmail ...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Si tu utilises TLS le port doit être 587
    https://support.google.com/a/answer/176600?hl=en
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 14
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Si tu utilises TLS le port doit être 587
    https://support.google.com/a/answer/176600?hl=en
    Il me semble en effet avoir essayer avec le port 587, j'ai essayer plusieurs autre messagerie comme Outlook, Orange et une que j'avais avec mon non de domaine (avec et sans SSL) toujours le même message malheureusement...

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    A tout hasard, la fonction connect, elle ne renverrait pas un code d'erreur, que tu pourrais récupérer sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int error= this->IdSMTP1->Connect(5000);
    if(error == 0){ // a priori, une erreur nulle est égale à une réussite ;)
        /* tout le reste */
    }else{
        /* si connect renvoie un code d'erreur, tu dois pouvoir récupérer une chaine de caractères
         * qui l'exprime en "langage humain" ici...
         */
    }
    si c'est le cas, la chaine de caractères récupérée à partir du code d'erreur renvoyé par ta fonction connect devrait pouvoir t'aider à comprendre la raison pour laquelle la connexion a échoué

    Je suis désolé de n'être pas plus précis, mais je ne fais plus joujou avec C++ builder depuis... en gros, depuis que c'est devenu embardadero
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut
    Il faut remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->IdSMTP1->Connect(5000); //Erreur ici
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this->IdSMTP1->Connect();

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 14
    Par défaut
    Oui voilà merci Argol_Medusa pour ta réponse, nous avons trouver le problème hier. Or maintenant un nouveau problème, il faut que le compte renseigner dans le programme soit connecter sur l'ordinateur de la personne. Or je voudrais qu'il n'y ai pas besoins de ceci, que le mail soit directement envoyer par simple connexion dans le programme.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 14
    Par défaut
    Voilà le problème est régler ! Enfin ! Pour ceux que ça intéresserait je vous mets le programme complet ci-dessous. Et pour information, le problème venez de google qui est devenu trop strict pour cette usage. J'utilise donc outlook pour envoyer sur mon adresse Gmail.

    Fonction à déclarer dans le Unit1.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void Gmail(UnicodeString username,
    		UnicodeString password,
    	        UnicodeString totarget,
    		UnicodeString subject,
    		UnicodeString body);
     
    UnicodeString mail_username;
    UnicodeString mail_password;
    UnicodeString mail_to;
    UnicodeString mail_subject;
    UnicodeString mail_body;
    Programme Unit1.cpp:
    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
    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
     
    //---------------------------------------------------------------------------
     
    #include <fmx.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.fmx"
    #pragma resource ("*.Windows.fmx", _PLAT_MSWINDOWS)
     
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void TForm1::Gmail(UnicodeString username,
    				   UnicodeString password,
    				   UnicodeString totarget,
    				   UnicodeString subject,
    				   UnicodeString body)
    {
    	TIdSSLIOHandlerSocketOpenSSL *SSL;
    	SSL = this->IdSSLIOHandlerSocketOpenSSL1; //Renommer le composant
    	TIdMessage *DATA;
    	DATA = this->IdMessage1; //Renommer le composant
    	TIdSMTP *SMTP;
    	SMTP = this->IdSMTP1; //Renommer le composant
     
    	SSL->SSLOptions->Method = sslvTLSv1; //Méthode = Version de SSL ou version de TLS
    	SSL->SSLOptions->Mode = sslmUnassigned;
    	SSL->SSLOptions->VerifyMode = (TIdSSLVerifyModeSet) 0;
     
    	DATA->From->Address = username; //On assigne nos identifiant (ne pas modifier)
    	DATA->Recipients->EMailAddresses = totarget; //On assigne notre destinataire (ne pas modifier)
    	DATA->Subject = subject; //On assigne notre objet (ne pas modifier)
    	DATA->Body->Text = body; //On assigne notre corps de message (ne pas modifier)
     
    	SMTP->IOHandler = SSL;
    	SMTP->Host = "smtp-mail.outlook.com"; //On utilise les serveurs smtp d'outlook (ne pas modifier)
    	SMTP->Port = 587; //On utilise les serveurs smtp d'outlook (ne pas modifier)
    	SMTP->Username = username; //On donne les paramètres de connexion avec l'identifiant (ne pas modifier)
    	SMTP->Password = password; //On donne les paramètres de connexion avec le mot de passe (ne pas modifier)
    	SMTP->UseTLS = utUseExplicitTLS;
     
    	SMTP->Connect(); //On lance la connexion
    	SMTP->Send(DATA); //On envoi notre message
    	SMTP->Disconnect(); //On se déconnecte du serveur
     
    	SMTP->Free(); //On supprime les objets
    	DATA->Free(); //On supprime les objets
    	SSL->Free(); //On supprime les objets
     
            this->Close(); //On ferme le programme
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	mail_username = "votremail@outlook.fr";
    	mail_password = "votrepass";
    	mail_to = "votredestinataire@gmail.com"; //Gmail ou autre
    	mail_subject = "VotreObjet";
    	mail_body = "Ligne 1: " + 
    				this->Edit1->Text + "\n" + //On réccupère le texte de Edit1 et on l’insère dans notre mail 
    				"Ligne 2: " +
    				this->Edit2->Text; //On réccupère le texte de Edit2 et on l’insère dans notre mail
     
    	try
    	{
    		Gmail(mail_username, mail_password, mail_to, mail_subject, mail_body);
    	}
    	catch(Exception &e)
    	{
    		ShowMessage(e.Message);
    	}
     
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Edit1Click(TObject *Sender)
    {
        this->Edit1->SelectAll();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Edit2Click(TObject *Sender)
    {
    	this->Edit2->SelectAll();
    }
    //---------------------------------------------------------------------------

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Envoi mail avec cdoSendmail: erreur de transport
    Par tAKAmAkA dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/12/2018, 12h04
  2. Réponses: 5
    Dernier message: 18/07/2016, 19h30
  3. Erreur envoi mail avec phpmailer (fichier joint)
    Par rhadien dans le forum Langage
    Réponses: 1
    Dernier message: 02/07/2008, 10h23
  4. [VBA Excel Messagerie] Envoi Mail avec gestion d'erreurs pour tracer.
    Par botakelymg dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/05/2008, 10h21

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