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++Builder Discussion :

Envoyer un fichier par mail


Sujet :

C++Builder

  1. #1
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut Envoyer un fichier par mail
    Bonjour,

    Je developpe une application de gestion, et le résultat d'une requette est sauver dans un fichier.

    A l'aide d'un boutton je cherche à envoyer ce fichier (+ un objet et un texte) à un client que j'ai son adresse mail dans un TEdit (exemple : usflay@yahoo.fr).

    Es-ce que quelqu'un pourrai m'aider, comment et quels composants utiliser.

    Merci.

    @+
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  2. #2
    Membre expérimenté
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    Voici un bout de code que j'ai fait il y a quelques temps.
    Je ne sais plus s'il marche mais il devrait t'aider à trouver ton bonheur.

    Code C++ : 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
     
    bool EnvoieMail(TForm* Fiche,InfosMail Infos,TStrings* Body,bool Date)
    {
     TIdSMTP* SMTP = new TIdSMTP(Fiche);//composant d'envoi de données
     TIdMessage* Message = new TIdMessage(Fiche);//composant de gestion du message
     
     Message->CharSet = "iso-8859-1";
     
     if (Date)//si insertion de date
     {
      AnsiString DatePost = "Posté le " + Now().DateString() + " à "+ Now().TimeString();//création de la ligne date
      Message->Body->Add(DatePost);//ajout au message
     }
     
     for (int i = 0;i < Body->Count;i++)//parcours des lignes du message
            Message->Body->Add(Body->Strings[i]);//ajout de la ligne
     Message->ContentType = "text/plain";//type de texte
     
     Message->From->Text = Infos.Source;//ajout adresse origine
     
     Message->Recipients->EMailAddresses = Infos.Cible;//ajout adresse cible
     Message->Subject = Infos.Sujet;//ajout sujet
     
     TIdAttachment* Attache = NULL;
     if (Infos.Joint.Length() != 0)//si piece jointe
     {
      Message->ContentType = "multipart/mixed";//type de message
      Attache = new TIdAttachment(Message->MessageParts,Infos.Joint);//ajout de la pièce jointe
     }
     
     SMTP->Host = Infos.SMTP; //adresse de l'hote
     SMTP->Port = 25;//port SMTP
     
     if (Infos.Pass.Length() != 0 && Infos.Login.Length() != 0)//si présence donnée log et pass
     {
      SMTP->UserId = Infos.Login;//ajout login
      SMTP->Password = Infos.Pass;//ajout pass
      SMTP->AuthenticationType = atLogin;//identification
     }
     else
            SMTP->AuthenticationType = atNone;//pas d'identification
     
     if (SMTP->AuthenticationType == atLogin)//si identification
     {
      if (!SMTP->Authenticate())//si identification ratée
      {
       if (Attache != NULL)
            delete Attache;
     
       delete Message;
       delete SMTP;
       return false;//erreur
      }
     }
     SMTP->Connect();//connection
     
     if (SMTP->Connected())//si connection OK
            SMTP->Send(Message);//envoie mail
     else//sinon
     {
      if (Attache != NULL)
            delete Attache;
      delete Message;
      delete SMTP;
      return false;//erreur
     }
     
     if (Attache != NULL)
            delete Attache;
     delete Message;
     delete SMTP;
     
     return true; //sortie OK
    }

    Nb:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef struct
    {
     AnsiString Source,//Mail source
                Cible,//Mail cible
                SMTP,//lien SMTP
                Login,//login pour lien SMTP
                Pass,//pass pour lien SMTP
                Sujet,//sujet du mail
                Joint;//chemin de la pièce jointe
    }InfosMail;//structure info mail
    + + +

  3. #3
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    une question concernant la structure que tu passes en parametre, en particulier a la variable Joint et a son commentaire correspondant. Il s'agit bien de la variable pour le fichier joint, rassure moi.....car d'apres le commentaire, il s'agit d'une couleur...........et dans ton code, il s'agit des parametre de la piece jointe.
    Merci

  4. #4
    Membre expérimenté
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    Citation Envoyé par Flob91
    une question concernant la structure que tu passes en parametre, en particulier a la variable Joint et a son commentaire correspondant. Il s'agit bien de la variable pour le fichier joint, rassure moi.....car d'apres le commentaire, il s'agit d'une couleur...........et dans ton code, il s'agit des parametre de la piece jointe.
    Merci
    Oups
    Erreur de copier/coller dans le commentaire
    C'est bien le chemin de la pièce jointe
    + + +

  5. #5
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Sinon il y a le composant TNMSMTP, qui est facile a utiliser.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  6. #6
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour,

    j'ai un compte sur yahoo.fr "kusp@yahoo.fr" et cherche à envoyer un mail+un fichier attaché vers l'email "usflay@yahoo.fr"

    Malheuresement je ne conais pas l'adresse du host de yahoo

    merci de m'aider svp.

    @+
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  7. #7
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Généralement cette adresse est smtp.yahoo.fr, mais il se peut que ce ne soit pas ca car certain fournisseur cache cette adresse pour vendre des service spécifique à eux, tu doit trouver cette information des les option de ta boite mail ou des endroit comme ca.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  8. #8
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Merci,

    alors comment dois-je faire pour résoudre ce problème, dois-je passé par un autre ? lequel?


    Merci de m'aider svp.

    @+
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  9. #9
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Effectivement passer par un autre est la meilleur solution si tu ne veut pas payer, il y a par exemple laposte.net, je l'utilise mais ce ne oit pas etre la meilleurs.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  10. #10
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    OK !

    j'ai créer un compte chez laposte.net, j'ai utiliser le code fournie par "bakaneko" avec :

    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    InfosMail info ;
     
    info.Source = "moncompte@laposte.net" ;    //Mail source
    info.Cible  = "usflay@yahoo.fr";           //Mail cible
    info.SMTP   = "smtp.laposte.net";        //lien SMTP
    info.Login  = "moncompte";                 //login pour lien SMTP
    info.Pass   = "lepass";                  //pass pour lien SMTP
    info.Sujet  = "envoi du rapport KPS-5";  //sujet du mail
    info.Joint  = "c:\att.txt" ;             //chemin de la pièce jointe
     
    EnvoieMail(this, info, Memo1 -> Lines, true);
    }
    il me génére une erreure de type :[Connection Closed GraceFully]

    Comment faire ?, à savoir que j'utilse un connexion internet via un réseau.


    merci de m'aider svp.
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  11. #11
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Je me demande si laposte.net n'exige pas une connexion SMTP un peu plus "secure" que celle-là. Pourquoi n'utilises-tu pas le serveur SMTP de ton fournisseur d'accès ? C'est généralement la meilleure solution pour envoyer des messages.
    RAD Studio 10.3 / Ubuntu 20.04 - RYZEN 7 2700X - 24Go de RAM

  12. #12
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Citation Envoyé par Altau
    Je me demande si laposte.net n'exige pas une connexion SMTP un peu plus "secure" que celle-là. Pourquoi n'utilises-tu pas le serveur SMTP de ton fournisseur d'accès ? C'est généralement la meilleure solution pour envoyer des messages.
    Non justement, je prend la poste car c'est l'une des moins sécurisé, mais il est vrai que la boite de ton fournisseur est peut etre la meilleur solution.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  13. #13
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour,

    Je m'inquiète toujours pour savoir comment résoudre cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Connection Closed GraceFully
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  14. #14
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    En utilisant certains composants de la suite indy, j'ai vu qu'une exception est générée à la fin de la transaction pour indiquer si tout c'est bien passé. Et ce message indique que c'est la cas.

    Il faut donc mettre l'envoie du mail dans un try et gérer la réception de l'exception dans le catch.

    Je crois que c'est précisé dans la documentation d'Indy.

  15. #15
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour,

    État des lieux :
    Windows XP SP3, connexion internet via réseau, Proxy Astaro.

    Ce que j'ai fais :
    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
     
    //
    // PARAMETRAGE DE LA CONNEXION
    //
       Screen -> Cursor = crHourGlass ;
     
      // Vérifier si la connexion est ouverte
         if(IdSMTP1 -> Connected())
            Form1 -> IdSMTP1 -> Disconnect() ;
     
      // Tentative de connexion
         if(!Form1 -> IdSMTP1 -> Connected())
            {
              // Déclaration aux composant des données de connexions.
                 IdSMTP1 -> Host     = "smtp.mail.yahoo.fr" ;
                 IdSMTP1 -> Port     = 465                  ;
                 IdSMTP1 -> UserId   = "compte@yahoo.fr"   ;
                 IdSMTP1 -> Password = "**********"       ;
     
              // Vérifier le type d'authentification
                 if((IdSMTP1 -> UserId.Trim().Length() == 0) && (IdSMTP1 -> Password.Trim().Length() == 0))
                    IdSMTP1 -> AuthenticationType = atNone  ;
                 else
                    IdSMTP1 -> AuthenticationType = atLogin ;
     
              // Connexion
                 IdSMTP1 -> Connect() ;
            }


    Sur ce, j'ai eu cette erreur :

    Connection Closed GraceFully

    Qu'est ce que je peux faire là ??
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  16. #16
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    Cette exception est levée sur quelle ligne du code ?

  17. #17
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Il n'est pas précisé une ligne, même en mode pas à pas. Cependant, il est logique que ce soit sur le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    IdSMTP1 -> Connect() ;
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  18. #18
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    Comme je le disais, c'est une exception qu'il faut gérer. En fait, le serveur distant à vu qu'il n'avait lus rien à faire et il s'est directement déconnecté.

    Voici un lien en anglais qui explique ce qu'il faut faire :
    http://www.swissdelphicenter.ch/en/showarticle.php?id=1

    Personnellement, si ce type d'exception se déroule après avoir envoyé ou reçu toutes les données dont j'avais besoin, je l'ignore.

  19. #19
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Merci pour lien, mais je n'arrive pas à me connecter ?
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  20. #20
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    Tu utilises de port 465 et il me semble que la plupart des fournisseurs qui n'utilisent pas le port 25 c'est parce qu'ils utilisent le TLS pour sécurisé la connexion au smtp. Je n'ai pas la même version que toi (j'utilise C++Builder 2009) et j'ai une propriété UseTLS sur mon composant.

    J'ai essayé chez moi et j'arrive a envoyer des messages (je n'ai pas essayé avec des pièces jointes). en utilisant le smtp d'orange sur le port 25.

Discussions similaires

  1. [XL-2003] envoyer un fichier par mail
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/09/2009, 23h12
  2. envoyer un fichier par mail
    Par alsimbad dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/03/2008, 14h31
  3. Envoyer un fichier par mail sans Outlook
    Par kiki29 dans le forum Contribuez
    Réponses: 2
    Dernier message: 03/09/2007, 01h11
  4. [Mail] Envoyer un fichier par mail
    Par Oberown dans le forum Langage
    Réponses: 3
    Dernier message: 24/10/2005, 15h55

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