Connexion au serveur smtp avec socket en c

Fermé
fanowine Messages postés 20 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 24 juillet 2019 - 18 nov. 2010 à 08:11
fanowine Messages postés 20 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 24 juillet 2019 - 6 déc. 2010 à 22:47
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


A voir également:

3 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
5 déc. 2010 à 14:10
au lieu de parler des erreurs, files ton code
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
5 déc. 2010 à 14:19
ha, et faut utiliser les sockets, pas passer par les commandes telnet pour ton progrmme C. Telnt, c'estpour tes tests à la mano"
0
fanowine Messages postés 20 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 24 juillet 2019 1
6 déc. 2010 à 22:47
#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