Posez votre question Signaler

Client smtp en C tout simple erreur 554 5.6.0 [Résolu]

archi12 16Messages postés lundi 13 février 2006Date d'inscription 6 février 2013Dernière intervention - Dernière réponse le 12 févr. 2011 à 10:47
Bonjour,
je ne sais pas si je suis sur le bon forum ?
pourquoi ce petit prog declenche une erreur
host back1h-mail02-02.me-wanadoo.net[10.223.143.72] said: 554
5.6.0 Message contains invalid header ?
alors que le serveur dit
250 2.0.0 6k5t1g0064yclF203k5tQ2 mail accepted for delivery
?????
merci de votre aide
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <netdb.h>
#define FALSE 0
#define TRUE !FALSE
#define BUFFSIZE 4096
char smtp_buff[BUFFSIZE];
int ber; // error flag
int smtp_sock;
char provider[] = "smtp.wanado.fr";
int recv_smtp(){
int i, received, point, end_char;
char c;
char buff_tempo[BUFFSIZE];
if (!ber){
printf(" waiting receive from %s\n", provider);
point = 0;
//received = 1;
memset(smtp_buff, 0, sizeof(smtp_buff));
end_char = FALSE;
while (!end_char){
memset(buff_tempo, 0, sizeof(buff_tempo));
if ((received = recv(smtp_sock, buff_tempo, sizeof(buff_tempo), 0)) < 0) {
printf("!! failed to receive\n");
ber = TRUE; // set error flag
}
else{
if (received > 0){
for (i=0; i < received; i++){
c = buff_tempo[i];
smtp_buff[point] = c;
if (c == '\n') end_char = TRUE;
point++;
}
}
}
}
printf("%d bytes received\n%s\n", point, smtp_buff);
}
return 0;
}
int send_smtp(char *param){
printf("send_smtp-->\n%s", param);
if (!ber){
if (send(smtp_sock, param, strlen(param), 0) != strlen(param)) {
printf("!! mismatch in number of send bytes");
ber = TRUE; // set error flag
}
}
return 0;
}
int main (int argc, char *argv[]){
struct sockaddr_in smtp_struct;
int get_ip_flag, nbtries, fin_receive;
char c;
struct hostent *he;
int smtp_port = 25; // where we want to connect
char smtp_helo[] = "HELO itsme\r\n";
char smtp_mail_from[] = "MAIL FROM: <xxxxx.xxxxx@wanadoo.fr>\r\n";
char smtp_rcpt_to[] = "RCPT TO: <yyyyy.yyyyy@wanadoo.fr>\r\n";
char smtp_data[] = "DATA\r\n";
char smtp_subject[] = "Subject: ici le sujet\r\n";
char smtp_text[] = "ici le texte\r\n";
char smtp_end_text[] = "\r\n.\r\n"; // on termine par CR LF . CR LF
char smtp_quit[] = "QUIT\r\n";
ber = FALSE; // reset error flag
get_ip_flag = FALSE;
while (!get_ip_flag){
printf("gethostbyname: try to get IP for %s\n", provider);
he = gethostbyname(provider);
if (!he){
herror("gethostbyname");
ber = FALSE;
printf("going to sleep 5 seconds\n");
sleep(5); /* sleep 5 seconds */
}
else {
printf("we got it !\n");
get_ip_flag = TRUE;
}
}
memcpy(&smtp_struct.sin_addr, he->h_addr_list[0], he->h_length);
printf("returned by gethostbyname: %s\n", inet_ntoa(smtp_struct.sin_addr));
/* create the smtp TCP socket */
if((smtp_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){
printf("!! failed to create smtp socket\n");
ber = TRUE; // !! set error flag
}
/* construct the smtp sockaddr_in structure */
if (!ber){
memset(&smtp_struct, 0, sizeof(smtp_struct)); /* clear struct */
smtp_struct.sin_family = AF_INET; /* Internet/IP */
memcpy(&smtp_struct.sin_addr, he->h_addr_list[0], he->h_length);
smtp_struct.sin_port = htons(smtp_port); /* smtp port */
}
/* establish connection to smtp */
if (!ber){
nbtries = 5;
get_ip_flag = FALSE;
while (nbtries > 0 && !get_ip_flag){
printf(" (%i) - try to connect to %s\n", nbtries, provider);
if (connect (smtp_sock,
(struct sockaddr *) &smtp_struct,
sizeof(smtp_struct)) < 0){
printf("!! failed to connect to %s\n", provider);
nbtries--;
printf("going to sleep\n");
sleep(5); /* 5 seconds */
}
else {
printf("success !\n");
get_ip_flag = TRUE;
}
}
if (!get_ip_flag) ber = TRUE;
}
recv_smtp(); /* 220 'server domain' Service Ready */
printf("smtp_helo >%s<\n", smtp_helo);
//
send_smtp(smtp_helo);
fin_receive = FALSE;
while(!fin_receive){
memset(smtp_buff, 0, sizeof(smtp_buff));
recv_smtp(); /* <--- receive till "250 " server domain OK */
if(strstr(smtp_buff, "250 ") != NULL) fin_receive = TRUE;
}
//
send_smtp(smtp_mail_from);
recv_smtp(); /* <--- 250 OK */
//
send_smtp(smtp_rcpt_to);
recv_smtp(); /* <--- 250 OK */
//
send_smtp(smtp_data);
recv_smtp(); /* <--- 354 start mail input, end with . */
//
send_smtp(smtp_subject);
//recv_smtp(); /* no answer here */
//
send_smtp(smtp_text);
//recv_smtp(); /* no answer here */
//
send_smtp(smtp_end_text);
recv_smtp(); /* <--- 250 OK */
//
send_smtp(smtp_quit);
recv_smtp(); /* <--- 221 server closing connection */
//
printf("close smtp socket\n");
close(smtp_sock);
//-------------------------------------------------
printf("*** smtp - exiting\n");
return 0;
}
Lire la suite 
Réponse
+0
moins plus
Bonjour,
J'ai testé votre prog et il fonctionne sur mon fai cependant je ne peux le tester sur wanadoo mon ip est rejetée par le filtre anti-spam. Après le HELO le serveur doit vous renvoyer des infos avec les "250-" jetez-y un oeil
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+0
moins plus
Bonjour,
Merci pour votre réponse rapide.
Comme vous le dites, le pb est bien autour du filtre anti_spam de wanadoo.
J'ai bien les infos "250-" apres le EHLO, mais ne sais pas trop quoi en faire. J'ai essayé avec l'ancienne methode HELO, mais meme resultat. J'ai bien peur que de me l'envoyer à moimeme soit le pb. pourtant ca marche avec Evolution !?
Je vais essayer avec un autre FAI.
Merci encore. A+
Ajouter un commentaire
Annonces
 
moins plus
Ce document intitulé «  client smtp en C tout simple erreur 554 5.6.0  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.