Smtp en socket

Résolu
XKaliBur Messages postés 45 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 13 février 2007 - 24 mai 2005 à 02:13
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 24 mai 2005 à 10:02
J'ai essayer de faire le plus simple possible mais ça marche pas... est-ce que quelqu'un aurais une idée...

Parce que quand je le fait en telnet ça marche donc le smtp et le port son bon...

Ou alors c'est que j'ai vraiment rien compris aux sockets... ou à l'smtp...





#include <winsock2.h>

/*socket*/

#include <stdio.h>

/*printf*/

#pragma comment(lib, "ws2_32.lib")



void main()

{

/* on initialise notre winsock */

WSADATA WSAData;

WSAStartup(MAKEWORD(2,0), &WSAData);

/* fin d'initialisation */



/* on construit notre socket */

SOCKET sock;

SOCKADDR_IN sin;

char buff[BUFSIZ];



sin.sin_addr.s_addr = inet_addr("81.255.54.9"); /*smtp.laposte.net*/

sin.sin_family = AF_INET;

sin.sin_port = htons(25);

sock = socket(AF_INET,SOCK_STREAM,0);

bind(sock, (SOCKADDR *)&sin, sizeof(sin));

/* fin de la construction du socket */



/* on connecte le socket*/

connect(sock, (SOCKADDR *)&sin, sizeof(sin));



/* envoi des messages */

sprintf(buff, "HELO hello\n");

send(sock, buff, sizeof(buff), 0);

printf("%s",buff);



sprintf(buff, "MAIL FROM: <*****@hotmail.com>\n");

send(sock, buff, sizeof(buff), 0);

printf("%s",buff);



sprintf(buff, "RCPT TO: <*****@laposte.net>\n");

send(sock, buff, sizeof(buff), 0);

printf("%s",buff);



sprintf(buff, "DATA\n");

send(sock, buff, sizeof(buff), 0);

printf("%s",buff);



sprintf(buff, "subject: test\n");

send(sock, buff, sizeof(buff), 0);

printf("%s",buff);



sprintf(buff, "test\n");

send(sock, buff, sizeof(buff), 0);

printf("%s",buff);



sprintf(buff, ".\n");

send(sock, buff, sizeof(buff), 0);

printf("%s",buff);



sprintf(buff, "QUIT\n");

send(sock, buff, sizeof(buff), 0);

printf("%s",buff);

/* fin de l'envoi */

}

2 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
24 mai 2005 à 10:02
salut;

fais attention tu utilises mal sprintf et send.

sprintf(buff, "%s", "HELO hello\n");
send(sock, buff, strlen(buff), 0);




pour sprintf ca aurait planté le jour au tu aurais essayé d'envoyer un
message qui contient un % (et a ce moment t'aurais eu du mal a piger).

c'est sans doute a cause du send que ce que tu as fait ne marchait pas
: tu envoies tout le buffer, alors que les derniers octets sont remplis
avec des caracteres quelconques que le serveur smtp ne doit pas
comprendre. dans le cas ou tu veux envoyer HELO hello\n, tu n'as que 11
caracteres a envoyer, or ton sizeof(buff) dit a send d'envoyer BUFSIZ
caracteres, tandis que strlen(buff) n'en envoie bien que 11.



a+
3
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
24 mai 2005 à 06:51
Regarde dans mes sources tu as des exemples de gestion du protocol SMTP avec fichier joint.

@+
Arnotic,
Admin CS, MVP Visual C++
0
Rejoignez-nous