Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Alexb dummy mioche

Inscrit le: 24 Jan 2004 Messages: 4
|
Posté le: Sam Jan 24, 2004 7:21 pm Sujet du message: Pbm de client SMTP |
|
|
Salut,
je me suis inspiré d'un des exemples de client SMTP du site qui envoyait des fichiers simplement pour envoyer des petits messages présents dans le corps de mon programme en C.
J'arrive quand ça veut bien marcher à me les envoyer mais j'ai toujours au moins 3 pbm de réponse du serveur pour les commandes MAIL FROM, DATA et enfin QUIT.
Les messages sont du type 500 Syntax error, command unrecognized
et une autre 502 ou 503, je ne me souviens plus.
Alors quelqu'un pouvait me répondre, ça m'arrangerais bien !
Merci d'avance.
Le code :
Code: |
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define DEBUG 0 /* Attention il y des pb si le msg envoye contient des % */
#define PACKET_SIZE 1024
/* Signature des fonctions globales*/
int main (int argc, char *argv[]);
void smtp_receive();
void smtp_send(char* msg);
/*Variables globales*/
int sock = -1;
char server_name[] = "smtp.tiscali.fr"; /* nom du host du serveur */
int port = 25;
/* Chaine de caracteres des messages*/
char s[2048];
int n = 0;
/*Buffer de reception des messages du serveur smtp*/
char buff[100];
int main (int argc, char *argv[])
{
/* addresse de la socket */
struct sockaddr_in serverSockAddr;
/* description du host serveur */
struct hostent *serverHostEnt;
/* addr du serveur */
unsigned long hostAddr;
/* if ( argc == 2 ) filename = argv[1];
else filename = NULL;*/ /* use stdin */
bzero(&serverSockAddr,sizeof(serverSockAddr));
/* converti l'adresse ip 9.100.1.1 en entier long */
hostAddr = inet_addr(server_name);
if ( (long)hostAddr != (long)-1)
bcopy(&hostAddr,&serverSockAddr.sin_addr,sizeof(hostAddr));
else /* si on a donne un nom */
{
serverHostEnt = gethostbyname(server_name);
if (serverHostEnt == NULL)
{
printf("probleme gethost\n");
exit(0);
}
bcopy(serverHostEnt->h_addr,&serverSockAddr.sin_addr,
serverHostEnt->h_length);
}
/* host to network port */
serverSockAddr.sin_port = htons(port);
/* AF_*** : INET=internet */
serverSockAddr.sin_family = AF_INET;
/* creation de la socket */
if ( (sock = socket(AF_INET,SOCK_STREAM,0)) < 0)
{
printf("probleme de creation de socket client\n");
exit(0);
}
/* requete de connexion */
if(connect(sock,(struct sockaddr *)&serverSockAddr,
sizeof(serverSockAddr))<0)
{
printf("probleme de demande de connection\n");
exit(0);
}
smtp_receive();
/* Identification client-serveur */
smtp_send("HELO ALEX_PC\r\n");
smtp_receive();
/* Specification de l'expediteur */
smtp_send("MAIL FROM:<a@iie.cnam>\r\n");
smtp_receive();
/* Specification du destinataire */
smtp_send("RCPT TO:<autre@libertysurf.fr>\r\n");
smtp_receive();
/* Envoi de l'en-tete et du corps message */
smtp_send("DATA");
smtp_receive();
smtp_send("Subject: Mon premier client SMTP !\r\n");
smtp_send("From: Alex\r\n");
smtp_send("Si je suis là, c'est que ça a marché mon pote !!!!!!!!!\r\n");
smtp_send("\r\n.");
smtp_receive();
/* Terminaison de la session smtp */
smtp_send("QUIT");
smtp_receive();
/* fermeture de la connection */
shutdown(sock,2);
close(sock);
return 0;
}
/* Fonction de reception des informations du serveur*/
void smtp_receive()
{
int n = recv(sock, buff, sizeof(buff), 0);
buff[n] = 0;
sprintf(s, "%s\n", buff);
printf(s);
printf("--------------------------------------------------\r\n");
}
/* Fonction d'emission des requetes vers le serveur*/
void smtp_send(char* msg)
{
sprintf(s, "%s\r\n", msg);
printf(s);
send(sock, s, strlen(s), 0);
}
|
_________________ C'est chaud !!!!!!!!!!!!!! |
|
Revenir en haut |
|
 |
Salemioche salemioche


Inscrit le: 05 Avr 2002 Messages: 350 Localisation: FR- BIOT
|
|
Revenir en haut |
|
 |
Alexb dummy mioche

Inscrit le: 24 Jan 2004 Messages: 4
|
Posté le: Lun Jan 26, 2004 1:15 am Sujet du message: |
|
|
Salut,
merci beaucoup, je n'ai plus de messages d'erreur grâce à toi : c'était vraiment une faute bidon mais que je n'avais pas vu car pour les autres commandes telles que le MAIL FROM, ceci ne semblait pas avoir d'incidence ! J'ai donc retiré tous les "\r\n" quand je fais smtp_send("ma_commande") mais par contre je ne reçois pas mon message "Si je suis là, c'est que ça a marché mon pote !!!!" donc il y a encore un hic !
Je fais :
Code: |
smtp_send("Si je suis là, c'est que ça a marché mon pote !!!!");
smtp_send(".");
|
 _________________ C'est chaud !!!!!!!!!!!!!! |
|
Revenir en haut |
|
 |
Alexb dummy mioche

Inscrit le: 24 Jan 2004 Messages: 4
|
Posté le: Lun Jan 26, 2004 11:17 am Sujet du message: |
|
|
A nouveau salut,
plutôt que d'utiliser "smtp.tiscali.fr", j'ai essayé "smtp.wanadoo.fr", et là, tout arrive comme il faut donc je ne sais pas ce qui cloche avec Tiscali !
 _________________ C'est chaud !!!!!!!!!!!!!! |
|
Revenir en haut |
|
 |
Salemioche salemioche


Inscrit le: 05 Avr 2002 Messages: 350 Localisation: FR- BIOT
|
|
Revenir en haut |
|
 |
Alexb dummy mioche

Inscrit le: 24 Jan 2004 Messages: 4
|
Posté le: Lun Jan 26, 2004 7:33 pm Sujet du message: |
|
|
Encore merci, une fois de plus !
Maintenant, je crois que tout est beaucoup plus clair.
 _________________ C'est chaud !!!!!!!!!!!!!! |
|
Revenir en haut |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
|