Connexion au serveur smtp avec socket en c

Bonjour,
les gars je n'arrive pas a me connecter au serveur SMTP en langage c
j'utilise les sockets
mais je n'arrive pas a établir la connexion avec le serveur
j'utilise l'adresse ip "77.238.184.86" au port 25
pourtant tout se passe bien avec telnet sur l'invite
en langage c la commande <system (telnet smtp.mail.yahoo.fr 25)>
me connecte avec le serveur mais aucune instruction ne peu s'ensuivre si le serveur ne se déconnecte pas

3 réponses

  1. Contributeur
    au lieu de parler des erreurs, files ton code
    0
    1. Contributeur
      ha, et faut utiliser les sockets, pas passer par les commandes telnet pour ton progrmme C. Telnt, c'estpour tes tests à la mano"
      0
      1. #include <winsock2.h>
        #include <stdio.h>
        #include <stdlib.h>
        #include <conio.h>
        #include <string.h>

        void init(void);//la fonction d'entête pour permettre la création connection pour les SE windows

        void end(void);//la fonction de fin pour la fermeture connection pour les SE windows

        void decoupemail(void);// fonction qui permet le découpage de l'email pour
        //identifier le nom de l'identiiant et le gestionnaire des mail de l'utilisateur

        void videvect (char t[],int a);//affecter les caracteres vide a un vecteur de caractères

        void vectnul (int t[],int a);// cette fonction affete les zeros dans tout vecteur d'entier

        void base64 (char nom[]);//la fonction qui effectu la convertion d'un vecteur de caractère en vecteur
        //en base 64

        char convertion (int b);//la fonction de correspondance entre une valeur entiere et le caractère de la base 64

        void convertascii (int a);//la fonction de convertion d'un entier en binaire de 8 bits

        void ajoutvect (char ta[],int a,char tb[],int b,int c);// la fonction de concatenation de parti de vecteur

        char vecbase[50],mpass[20]="medecin",adress[24]="edwinefam2001@yahoo.fr";
        char user[30],gestmail[20];
        int nblettre=0,t[8];

        int main ()
        {
        init();

        SOCKADDR_IN sin;
        SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);//open socket
        char mess[50],mess1[50],mess2[50],mess3[50],mess4[50];
        int n = 0,choix;
        char contact[12]="ehlo smtp",identifiant[30]="autplain ",expediteur[30]="mail from: ";
        char destadress[25],suj[15],contenu[50];
        char recepteur[30]="mail to: ",sujet[20]="subjet: ",donnes[6]="data :";
        char connexion[30]="smtp.mail.",vide[3]=" ",quitter[6]="quit",conserver[6]="noop";

        decoupemail();
        strcat (connexion,gestmail);
        ajoutvect (user,nblettre,vide,0,1);
        ajoutvect (user,nblettre+1,mpass,0,strlen(mpass));
        base64 (user);
        strcat (identifiant,vecbase);
        strcat (expediteur,adress);

        if(sock == INVALID_SOCKET)
        {
        perror("socket()");
        printf (" \n ouverture incorect du socket\n ");
        system ("pause");
        return 1; /* Creation du socket a echouer */
        }
        printf ("\nsocket est maintenant ouvert \n");

        sin.sin_addr.s_addr = inet_addr("127.0.0.2");
        sin.sin_port = htons (3113);
        sin.sin_family = AF_INET;
        // se connecter a server
        if ( connect(sock, (SOCKADDR *)&sin, sizeof sin) == SOCKET_ERROR )
        {
        perror("Error: connect");
        printf (" \n pas connecter au serveur \n");
        system ("pause");
        return 1;
        }

        printf ( "\n Vous etes maintenant connecter au serveur \n");

        // envoi de donnees
        if(send(sock,contact, strlen(contact), 0) < 0)
        {
        perror("send()");
        printf (" \n l'envoi de message a echouer\n ");
        system ("pause");
        return 1; /* l'envoi a echouer */
        }
        else
        printf (" \n l'envoi de message salut du serveur\n ");

        //recevoir donner
        if((n = recv(sock, mess, sizeof mess - 1, 0)) < 0)
        {
        perror("recv()");
        printf (" \n la reception de message a echouer\n ");
        system ("pause");
        return 1; /* la reception a echouer */
        }
        else
        {
        printf (" \n reception de message OK\n ");
        printf (" \n le message est \t %s\n ",mess);
        }

        // envoi de donnees
        if(send(sock,identifiant, strlen(identifiant), 0) < 0)
        {
        perror("send()");
        printf (" \n l'envoi de message a echouer\n ");
        system ("pause");
        return 1; /* l'envoi a echouer */
        }
        else
        printf (" \n l'envoi de message d'identification\n ");

        //recevoir donner
        if((n = recv(sock, mess1, sizeof mess1 - 1, 0)) < 0)
        {
        perror("recv()");
        printf (" \n la reception de message a echouer\n ");
        system ("pause");
        return 1; /* la reception a echouer */
        }
        else
        {
        printf (" \n reception de message OK\n ");
        printf (" \n le message est \t %s\n ",mess1);
        }

        do
        {
        printf ("\n entrer l'adresse du recepteur du message :\t ");
        fgets (destadress,sizeof (destadress),stdin);
        strcat(recepteur,destadress);

        // envoi de donnees
        if(send(sock,expediteur, strlen(expediteur), 0) < 0)
        {
        perror("send()");
        printf (" \n l'envoi de message a echouer\n ");
        system ("pause");
        return 1; /* l'envoi a echouer */
        }
        else
        printf (" \n l'envoi de l'expediteur du message\n ");

        //recevoir donner
        if((n = recv(sock, mess2, sizeof mess2 - 1, 0)) < 0)
        {
        perror("recv()");
        printf (" \n la reception de message a echouer\n ");
        system ("pause");
        return 1; /* la reception a echouer */
        }
        else
        {
        printf (" \n reception de message OK\n ");
        printf (" \n le message est \t %s\n ",mess2);
        }

        // envoi de donnees
        if(send(sock,recepteur, strlen(recepteur), 0) < 0)
        {
        perror("send()");
        printf (" \n l'envoi de message a echouer\n ");
        system ("pause");
        return 1; /* l'envoi a echouer */
        }
        else
        printf (" \n l'envoi de l'adresse du destinateur du message\n ");

        //recevoir donner
        if((n = recv(sock, mess3, sizeof mess3 - 1, 0)) < 0)
        {
        perror("recv()");
        printf (" \n la reception de message a echouer\n ");
        system ("pause");
        return 1; /* la reception a echouer */
        }
        else
        {
        printf (" \n reception de message OK\n ");
        printf (" \n le message est \t %s\n ",mess3);
        }

        printf ("\n entrer le titre du message a envoyer :\t ");
        fgets (suj,sizeof(suj),stdin);
        strcat(sujet,suj);

        // envoi de donnees
        if(send(sock,sujet, strlen(sujet), 0) < 0)
        {
        perror("send()");
        printf (" \n l'envoi de message a echouer\n ");
        system ("pause");
        return 1; /* l'envoi a echouer */
        }
        else
        printf (" \n l'envoi de l'adresse du destinateur du message\n ");

        // envoi de donnees
        if(send(sock,donnes, strlen(donnes), 0) < 0)
        {
        perror("send()");
        printf (" \n l'envoi de message a echouer\n ");
        system ("pause");
        return 1; /* l'envoi a echouer */
        }
        else
        printf (" \n l'envoi du contenu du message\n ");

        printf ("\n entrer le contenu du message :\t ");
        fgets (contenu,sizeof(contenu),stdin);
        // envoi de donnees
        if(send(sock,contenu, strlen(contenu), 0) < 0)
        {
        perror("send()");
        printf (" \n l'envoi de message a echouer\n ");
        system ("pause");
        return 1; /* l'envoi a echouer */
        }
        else
        printf (" \n l'envoi du contenu du message\n ");

        //recevoir donner
        if((n = recv(sock, mess4, sizeof mess4 - 1, 0)) < 0)
        {
        perror("recv()");
        printf (" \n la reception de message a echouer\n ");
        system ("pause");
        return 1; /* la reception a echouer */
        }
        else
        {
        printf (" \n reception de message OK\n ");
        printf (" \n le message est \t %s\n ",mess4);
        }

        do
        {
        system("cls");
        printf ("\n \t \t CHOISIR :\n");
        printf ("\n \t 1 --> POUR ENVOYER UN AUTRE MESSAGE");
        printf ("\n \t 2 --> POUR RETOURNER A L'ACCUEIL");
        printf ("\n \t 3 --> POUR SE DECONNECTER \n");
        scanf ("%d",&choix);
        }while ((choix>3)||(choix<1));

        if ((choix==3)||(choix==2))
        {
        // envoi de donnees
        if(send(sock,quitter, strlen(quitter), 0) < 0)
        {
        perror("send()");
        printf (" \n l'envoi de message a echouer\n ");
        system ("pause");
        return 1; /* l'envoi a echouer */
        }
        else
        printf (" \n l'envoi de message de sortie OK\n ");

        if (choix==3)
        exit (1);
        }
        else
        {
        // envoi de donnees
        if(send(sock,conserver, strlen(conserver), 0) < 0)
        {
        perror("send()");
        printf (" \n l'envoi de message a echouer\n ");
        system ("pause");
        return 1; /* l'envoi a echouer */
        }
        else
        printf (" \n l'envoi du message de conservation \n ");

        }

        }while (choix==1);

        // fermer socket
        closesocket(sock);

        end();

        system ("pause");
        return 1;
        }
        //////////////////////////////////////////////////////////////////////////////
        void init(void)
        {
        WSADATA wsa;
        int err = WSAStartup(MAKEWORD(2, 2), &wsa);
        if(err < 0)
        {
        puts("WSAStartup failed !");
        exit(EXIT_FAILURE);
        }
        }
        ////////////////////////////////////////////////////////////////////////////
        void end(void)
        {
        WSACleanup();
        }
        ///////////////////////////////////////////////////////////////////////
        void videvect (char t[],int a)
        {
        int i;

        for (i=0;i<a;i++)
        t[i]=' ';
        }

        //////////////////////////////////////////////////////////////////////
        void decoupemail(void)
        {
        int i,j;

        i=0;
        videvect (user,30);
        videvect (gestmail,30);

        while (adress[i] != '@')
        {
        user[i]=adress[i];
        i=i+1;
        }
        nblettre=i;
        i=i+1;
        j=0;
        while (i < strlen(adress))
        {
        gestmail[j]=adress[i];
        i=i+1;
        j=j+1;
        }
        //nblettre1=j;
        }
        //////////////////////////////////////////////////////////////
        void ajoutvect (char ta[],int a,char tb[],int b,int c)
        {
        int i,j=0;

        for (i=a;i<=(a+c);i++)
        {
        ta[i]=tb[b+j];
        j=j+1;
        }
        }
        ///////////////////////////////////////////////////////////////
        void vectnul (int t[],int a)
        {
        int i;

        for (i=0;i<a;i++)
        t[i]=0;
        }
        ////////////////////////////////////////////////////////////////
        void convertascii (int a)
        {
        int i,b,d;

        for (i=0;i<8;i++)
        t[i]=0;
        b=a;
        i=7;
        while ( b!=0 )
        {
        t[i]=b%2;
        b=b/2;
        i=i-1;
        }
        }
        /////////////////////////////////////////////////////////////////////
        char convertion (int b)
        {
        char c;

        switch (b)
        {
        case 0:
        c ='A';
        break;
        case 1:
        c ='B';
        break;
        case 2:
        c ='C';
        break;
        case 3:
        c ='D';
        break;
        case 4:
        c ='E';
        break;
        case 5:
        c ='F';
        break;
        case 6:
        c ='G';
        break;
        case 7:
        c ='H';
        break;
        case 8:
        c ='I';
        break;
        case 9:
        c ='J';
        break;
        case 10:
        c ='K';
        break;
        case 11:
        c ='L';
        break;
        case 12:
        c ='M';
        break;
        case 13:
        c ='N';
        break;
        case 14:
        c ='O';
        break;
        case 15:
        c ='P';
        break;
        case 16:
        c ='Q';
        break;
        case 17:
        c ='R';
        break;
        case 18:
        c ='S';
        break;
        case 19:
        c ='T';
        break;
        case 20:
        c ='U';
        break;
        case 21:
        c ='V';
        break;
        case 22:
        c ='W';
        break;
        case 23:
        c ='X';
        break;
        case 24:
        c ='Y';
        break;
        case 25:
        c ='Z';
        break;
        case 26:
        c ='a';
        break;
        case 27:
        c ='b';
        break;
        case 28:
        c ='c';
        break;
        case 29:
        c ='d';
        break;
        case 30:
        c ='e';
        break;
        case 31:
        c ='f';
        break;
        case 32:
        c ='g';
        break;
        case 33:
        c ='h';
        break;
        case 34:
        c ='i';
        break;
        case 35:
        c ='j';
        break;
        case 36:
        c ='k';
        break;
        case 37:
        c ='l';
        break;
        case 38:
        c ='m';
        break;
        case 39:
        c ='n';
        break;
        case 40:
        c ='o';
        break;
        case 41:
        c ='p';
        break;
        case 42:
        c ='q';
        break;
        case 43:
        c ='r';
        break;
        case 44:
        c ='s';
        break;
        case 45:
        c ='t';
        break;
        case 46:
        c ='u';
        break;
        case 47:
        c ='v';
        break;
        case 48:
        c ='w';
        break;
        case 49:
        c ='x';
        break;
        case 50:
        c ='y';
        break;
        case 51:
        c ='z';
        break;
        case 52:
        c ='0';
        break;
        case 53:
        c ='1';
        break;
        case 54:
        c ='2';
        break;
        case 55:
        c ='3';
        break;
        case 56:
        c ='4';
        break;
        case 57:
        c ='5';
        break;
        case 58:
        c ='6';
        break;
        case 59:
        c ='7';
        break;
        case 60:
        c ='8';
        break;
        case 61:
        c ='9';
        break;
        case 62:
        c ='+';
        break;
        case 63:
        c ='/';
        break;
        case 64:
        c ='=';
        break;
        case 65:
        c ='=';
        break;
        }

        return c;
        }
        ////////////////////////////////////////////////////////
        void base64 (char nom[])
        {
        int i,j,k,som,puis,borne,elt;
        int ens8[500],vecval[100];

        vectnul (ens8,500);
        k=0;
        for (i=0;i<strlen(nom);i++)
        {
        convertascii ((int) nom[i]);//convertion de chaque caractere en code ascii
        for (j=0;j<8;j++)
        {
        ens8[k]=t[j];
        k=k+1;
        }
        }
        borne=k;
        vectnul (vecval,100);
        j=0;
        elt=0;
        while (j<borne)
        {
        som=0;
        puis=32;
        for (i=j;i<j+6;i++)
        {
        som = som + (ens8[i]*puis);
        puis = puis /2;
        }
        j=i;
        vecval[elt]=som;
        elt=elt+1;
        }
        videvect (vecbase,60);
        for (i=0;i<elt;i++)
        vecbase[i] = convertion(vecval[i]);

        }
        0