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 de mail


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Par défaut Envoie de mail
    Bonjour a tous,

    Voici mon soucis depuis quelque temps j'ai modifie un programme pour envoyer des mails.Le code et un mixe entre du c du c++ je n'est pas réussi a tout mettre en c++...

    Le programme marche parfaitement depuis quelque mois mais depuis que j'ai rajouter 2 ligne de code permettant d'envoyer 4 mail d'affiler a des adresse differente celui-ci ne fonctionne plus que 1 fois sur 2. j'imagine que ces a cause du protocole TCP je ne reçoit pas toute la reponse du serveur mais je ne voit pas comment coder cela :/

    Voici la classe socket que j'ai cree

    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
    #include <winsock2.h>
    #include <iostream>
    #include <windows.h>
    #include "socket.h"
     
    #pragma comment(lib,"ws2_32.lib")
    using namespace std;
     
     
    ClassSocket::ClassSocket()
    {
     
    }
     
     
    void ClassSocket::SendAndReceive(SOCKET serveur_socket, char * messageEnvoyer)
    {
        char bufRecevoir[1024];
        int taille,retVal,nbrecv;
        cout<<"Envoye: "<<messageEnvoyer<<"\n";
        taille  = (int)strlen( messageEnvoyer );
        retVal = send( serveur_socket, messageEnvoyer, taille, 0 );
        memset(bufRecevoir,0,1024);
     
        while(!bufRecevoir[0])
        {
            nbrecv = recv( serveur_socket, bufRecevoir, 1024, 0 );
        }
        cout<<"Recu : "<<bufRecevoir<<"\n";
    }
     
    int ClassSocket::mail_simple(SOCKET sock,const char* from,const char* to,const char* body)
    {
        char buffer [100000];
        SendAndReceive(sock, "\r\n");
        sprintf_s(buffer,"MAIL FROM: <%s>\r\n",from);
        SendAndReceive(sock, buffer);
        sprintf_s(buffer,"RCPT TO: <%s>\r\n",to);
        SendAndReceive(sock, buffer);
        SendAndReceive(sock, "DATA\r\n");
        sprintf_s(buffer, "Subject: Outil de Suivi\nMime-Version: 1.0;\nContent-Type: text/html; charset=\"ISO-8859-1\";\nContent-Transfer-Encoding: 7bit;\n\n\n%s",body);
        SendAndReceive(sock, buffer);
        SendAndReceive(sock,  "QUIT\r\n");
        return 0;
    }
     
    SOCKET ClassSocket::connexion(char* nomServeur,unsigned short port)
    {
        char buf[ 1024 ] ={0};
        int nbrecv;
        struct sockaddr_in   adresseSocket;    // addresse de la socket
        struct hostent     * nom_Serveur;     // description du host serveur
        SOCKET serveur_socket = 0;
        memset(&adresseSocket,0, sizeof( adresseSocket ) );
        nom_Serveur = gethostbyname( nomServeur );
        if ( nom_Serveur == NULL )              // Si serveur  inacessible
            return (SOCKET)-1;
        memcpy(&adresseSocket.sin_addr,nom_Serveur->h_addr, nom_Serveur->h_length );
        adresseSocket.sin_port = htons( port );         // host to network port
        adresseSocket.sin_family = AF_INET;             // AF_*** : INET=internet
    // creation de la socket
        serveur_socket = socket( AF_INET, SOCK_STREAM, 0 );
        if ( serveur_socket < 0)
            return (SOCKET)-2;
    // requete de connexion
        if( connect( serveur_socket, ( struct sockaddr * ) &adresseSocket,sizeof( adresseSocket ) ) < 0 )      //Connection impossible serveur
            return (SOCKET)-3;
        while( !buf[0] )
            nbrecv = recv( serveur_socket, buf, 1024, 0 );
        return serveur_socket;
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void Mail::envoieDeMail(char* body,const char* TO)
    {
        SOCKET sock;
        WSADATA wsaData;
        ClassSocket classSocket;
        WSAStartup( 0x0101, &wsaData );
        sock = classSocket.connexion(SMTP_SERVER,SMTP_PORT);
        if (sock<0)
        {
            cout<<"Echec code : "<<(int)sock<<"\n";
        }
        classSocket.mail_simple(sock,FROM,TO,body);
        shutdown( sock, 2 );
    }
    Et voila le code que j'ai ajouter


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    switch(compteurFichierTexte)
        {
           case 0: {envoieDeMail((char*)m_body.str().c_str(),TO_Toulouse); break;}
           case 1: {envoieDeMail((char*)m_body.str().c_str(),TO_Lille);break;}
           case 2: {envoieDeMail((char*)m_body.str().c_str(),TO_Nantes);break;}
           case 3: {envoieDeMail((char*)m_body.str().c_str(),TO_Lyon);break;}
        }

    Voici les message d'erreur

    Nom : Capture.PNG
Affichages : 212
Taille : 1,9 Ko

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    Création d'une roue carrée.
    Boost.asio est ton ami.
    https://neckara.developpez.com/tutor...idation-email/

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Je pense qu'avec libcurl ce serait encore plus simple.

Discussions similaires

  1. Envoi de mail au format html
    Par Mephyston dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/01/2004, 12h29
  2. Envoi de mail au format Rich-Text
    Par LineLe dans le forum ASP
    Réponses: 4
    Dernier message: 29/10/2003, 16h27
  3. envoi de mail avec attachement de fichier
    Par GMI3 dans le forum Modules
    Réponses: 2
    Dernier message: 24/09/2003, 11h22
  4. Outlook ne se ferme pas après un envoi de mail
    Par Joke dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/06/2003, 17h32
  5. envoi de mail, protocol SMTP langage C
    Par Heimdall dans le forum Développement
    Réponses: 2
    Dernier message: 23/05/2003, 11h22

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