Programme en c
bonjour
j'ai essayé d'ecrire un programmme en c pour envoi de mail mais ça marche pas et je sais pas ou est le problème
mon programme se base sur des comparaisons de chaines de caractères et read et write(socket domaine AF_INET) pourquoi ça marche pas je sais pas voici le programme:
#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#define MAXLINE 80
main()
{
char chaine1[MAXLINE+1]="HELO localhost.projetA.ma\0";
char chaine2[MAXLINE+1]="MAIL FROM:<root@projetA.ma\0";
char chaine3[MAXLINE+1]="RCPT TO:<nada@projetA.ma>\0";
char chaine4[MAXLINE+1]="DATA\0";
char chaine5[MAXLINE+1]="vous etes cible de spams\0";
char chaine6[MAXLINE+1]=". \0";
char chaine7[MAXLINE+1]="QUIT";
fprintf(stderr,"1");
int sockfd;
struct sockaddr_in serv_addr;
char adresse_ip[20];
char sendline[MAXLINE],recvline[MAXLINE + 1];
int n;
bzero((char *) &serv_addr,sizeof(serv_addr));
serv_addr.sin_family =AF_INET;
serv_addr.sin_port=htons(25);
serv_addr.sin_addr.s_addr=inet_addr("172.16.30.1");
if((sockfd = socket(AF_INET,SOCK_STREAM,0))<0)
{fprintf(stderr,"\n client : socket erreur");
exit(2);
}
fprintf(stderr,"2");
if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
{fprintf(stderr,"client: connect erreur \n");
exit(3);
}
fprintf(stderr,"3");
while(1)
{
n=read(sockfd,recvline,sizeof(recvline)+1);
fprintf(stderr,recvline);
fprintf(stderr,"5");
if(strstr(recvline,"220")!=NULL)
{fprintf(stderr,"6");
write(sockfd,chaine1,sizeof(chaine1));
fprintf(stderr,"7");
}
fprintf(stderr,recvline);
if(strstr(recvline,"sender ok")!=NULL)
{
fprintf(stderr,"7");
write(sockfd,chaine3,sizeof(chaine3));
fprintf(stderr,"7");
}
if(strstr(recvline,"Recipient ok")!=NULL)
{write(sockfd,chaine4,sizeof(chaine4));
fprintf(stderr,"8");
}
if(strstr(recvline,"by itself")!=NULL)
{ fprintf(stderr,"9");
write(sockfd,chaine5,sizeof(chaine5));
}
write(sockfd,chaine6,sizeof(chaine6));
if(strstr(recvline,"delivery")!=NULL)
{
fprintf(stderr,"10");
write(sockfd,chaine7,sizeof(chaine7));
}
}
shutdown(sockfd,0);
close(sockfd);
exit(0);
}
merci pour toute aide
j'ai essayé d'ecrire un programmme en c pour envoi de mail mais ça marche pas et je sais pas ou est le problème
mon programme se base sur des comparaisons de chaines de caractères et read et write(socket domaine AF_INET) pourquoi ça marche pas je sais pas voici le programme:
#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#define MAXLINE 80
main()
{
char chaine1[MAXLINE+1]="HELO localhost.projetA.ma\0";
char chaine2[MAXLINE+1]="MAIL FROM:<root@projetA.ma\0";
char chaine3[MAXLINE+1]="RCPT TO:<nada@projetA.ma>\0";
char chaine4[MAXLINE+1]="DATA\0";
char chaine5[MAXLINE+1]="vous etes cible de spams\0";
char chaine6[MAXLINE+1]=". \0";
char chaine7[MAXLINE+1]="QUIT";
fprintf(stderr,"1");
int sockfd;
struct sockaddr_in serv_addr;
char adresse_ip[20];
char sendline[MAXLINE],recvline[MAXLINE + 1];
int n;
bzero((char *) &serv_addr,sizeof(serv_addr));
serv_addr.sin_family =AF_INET;
serv_addr.sin_port=htons(25);
serv_addr.sin_addr.s_addr=inet_addr("172.16.30.1");
if((sockfd = socket(AF_INET,SOCK_STREAM,0))<0)
{fprintf(stderr,"\n client : socket erreur");
exit(2);
}
fprintf(stderr,"2");
if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
{fprintf(stderr,"client: connect erreur \n");
exit(3);
}
fprintf(stderr,"3");
while(1)
{
n=read(sockfd,recvline,sizeof(recvline)+1);
fprintf(stderr,recvline);
fprintf(stderr,"5");
if(strstr(recvline,"220")!=NULL)
{fprintf(stderr,"6");
write(sockfd,chaine1,sizeof(chaine1));
fprintf(stderr,"7");
}
fprintf(stderr,recvline);
if(strstr(recvline,"sender ok")!=NULL)
{
fprintf(stderr,"7");
write(sockfd,chaine3,sizeof(chaine3));
fprintf(stderr,"7");
}
if(strstr(recvline,"Recipient ok")!=NULL)
{write(sockfd,chaine4,sizeof(chaine4));
fprintf(stderr,"8");
}
if(strstr(recvline,"by itself")!=NULL)
{ fprintf(stderr,"9");
write(sockfd,chaine5,sizeof(chaine5));
}
write(sockfd,chaine6,sizeof(chaine6));
if(strstr(recvline,"delivery")!=NULL)
{
fprintf(stderr,"10");
write(sockfd,chaine7,sizeof(chaine7));
}
}
shutdown(sockfd,0);
close(sockfd);
exit(0);
}
merci pour toute aide
A voir également:
- Programme en c
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Programme word gratuit - Guide
- Message programmé iphone - Guide
- Desinstaller un programme - Guide
5 réponses
Corrige ces quelques warnings déjà
gcc -W -Wall plop.c plop.c:11: attention : le type du retour est « int » par défaut plop.c: In function `main': plop.c:29: attention : déclaration implicite de la fonction « inet_addr » plop.c:44: attention : déclaration implicite de la fonction « read » plop.c:49: attention : déclaration implicite de la fonction « write » plop.c:80: attention : déclaration implicite de la fonction « close » plop.c:13: attention : variable inutilisée « chaine2 » plop.c:23: attention : variable inutilisée « adresse_ip » plop.c:24: attention : variable inutilisée « sendline »
bonjour
merci pour la rèponce,je doit ajouter que je travail sous unix,(redhat ) et le but est d'envoyer un mail par socket client,la socket serveur est un démon "sendmail" qui est en écoute sur le port 25
merci pour votre aide
merci pour la rèponce,je doit ajouter que je travail sous unix,(redhat ) et le but est d'envoyer un mail par socket client,la socket serveur est un démon "sendmail" qui est en écoute sur le port 25
merci pour votre aide
1) Ajoute un :
#include <unistd.h>
#include <arpa/inet.h>
en début de fichier.
2) Tu peux supprimer lignes 13,23,24 les variables chaine2 adresse_ip,sendline.
3) Change tes "exit(n);" par "return n;" en remplaçant n par l'entier adequat.
4) Change "main(){" par "int main(){ "
Dis-moi si ça marche mieux et à quelle étape ça bloque (chez moi entre 2 et 3)
#include <unistd.h>
#include <arpa/inet.h>
en début de fichier.
2) Tu peux supprimer lignes 13,23,24 les variables chaine2 adresse_ip,sendline.
3) Change tes "exit(n);" par "return n;" en remplaçant n par l'entier adequat.
4) Change "main(){" par "int main(){ "
Dis-moi si ça marche mieux et à quelle étape ça bloque (chez moi entre 2 et 3)
merci mamiemando
normalement ça bloque à l'étape 7,peut etre que vous n'avez pas le sendmail dans votre pc,et il faut bien sur changer l'adresse ip
merci
normalement ça bloque à l'étape 7,peut etre que vous n'avez pas le sendmail dans votre pc,et il faut bien sur changer l'adresse ip
merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ca doit être ça en effet ;) Tu peux me tutoyer au fait, malgré mon age avancé (voix chevrotante) ;o).
Tu as essayé les modifs ci-dessus ? Tu es sûr que ta socket est bien ouverte (la programmation réseau c'est pas mon fort malheureusement :( ) ?
Sinon essaye de voir avec gdb où ca bloque (compile au préalable avec l'option -g pour gcc). Mets un break qq lignes avant le bloquage (br no_de_ligne), lance le prgramme (r), et avance pas à pas (n, s). Tape bt pour voir l'environnement dans lequel tu te trouves. Peut être que ça t'aidera...
Je ne peux malheureusement pas poussé les tests sur ma machine :(
Tu as essayé les modifs ci-dessus ? Tu es sûr que ta socket est bien ouverte (la programmation réseau c'est pas mon fort malheureusement :( ) ?
Sinon essaye de voir avec gdb où ca bloque (compile au préalable avec l'option -g pour gcc). Mets un break qq lignes avant le bloquage (br no_de_ligne), lance le prgramme (r), et avance pas à pas (n, s). Tape bt pour voir l'environnement dans lequel tu te trouves. Peut être que ça t'aidera...
Je ne peux malheureusement pas poussé les tests sur ma machine :(