[Sockets] Comment envoyer un mail ?

Signaler
Messages postés
8
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
20 février 2005
-
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
-
Salut !

Cela fait déjà plusieurs jours que j'essaie de créer un programme (en console) pour envoyer des mails mais je n'y arrive pas.

C'est pour ça que je pose la question ?

12 réponses

Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
10
as-tu regarder les différentes sources du site? et si oui, les utilises-tu bien?
Bob...

"La chance accorde ses faveur aux esprits avertis..."
Messages postés
8
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
20 février 2005

Nan j'ai rien trouvé. Je ne programme pour l'instant qu'en console.



Merci quand meme
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Salut DamianC,

quand tu cherches qq chose sur le site, il faut que tu te dises que tu ne trouveras pas exactement ce que tu souhaites. Par contre tu trouveras des bouts de code qui te seront utiles par ci par là.
Par exemple, sur le protocole POP3 pour l'envoye de mails et d'autres sources sur l'utilisation sockets (même en mode console).
Donc cherche plutôt à décomposer le programme que tu souhaites faire pour mieux cibler les recherches.

YOYO, @+.
YOYO
Messages postés
8
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
20 février 2005

Merci de ton conseil yoyo269 !



Mais il me semble que le protocole pop3 est utilisé pour recevoir le courier tandisque le smtp et le protocole pour envoyer.



Voila a+
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Bien vu DamianC,

t'as bien fait de le préciser.
Bon courage.

YOYO, @+.
YOYO
Messages postés
8
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
20 février 2005

Voila j'ai trouvé ce code :





#include <winsock2.h>

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





void main()

{

WSADATA WSAData;

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



SOCKET sock;

SOCKADDR_IN sin;

sin.sin_addr.s_addr = inet_addr("smtp.laposte.net"); //Serveur a definir ici

sin.sin_family = AF_INET;

sin.sin_port = htons(25);

sock = socket(AF_INET,SOCK_STREAM,0);





if(connect(sock,(SOCKADDR*)&sin,sizeof(sin))==0)

{

send(sock, "HELO smtp\r\n", 11, 0);

send(sock, "MAIL From: <dede@yahoo.fr>\r\n", 28, 0);

send(sock, "RCPT To: <dcortes@hispeed.ch>\r\n", 36, 0);

send(sock, "DATA\r\n", 8, 0);

send(sock, "Subject: Test !!!\r\n\r\n Test\r\n.\r\n", 56, 0);

send(sock, "QUIT\r\n", 6, 0);

}





closesocket(sock);

WSACleanup();



}





Mais il n'a pas l'air de fonctionner.



- Je me demande si la déclaration de l'adresse du smtp est bonne ?

- Si il ne faut pas entrer un login et un pass pour pouvoir envoyer avec le smtp ?



Voila merci d'avance
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Désolé mais je peux pas t'aider dans ce domaine.
Je n'y connais rien aux protocoles des mails.
Cherche plutôt plusieurs sources et compare les entre elles.
Comme ça tu pourras récupérer les bases essentielles au bon fonctionnement.
Et aussi, essaye quand même un peu de réfléchir par toi même.
Si tout le monde posait une question dès qu'il a le moindre problème, le forum serait inondé.

YOYO, @+.
YOYO
Messages postés
8
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
20 février 2005

lol t'es un petit comique, vi c'est vrai je suis un peu feignasse dans
les bords mais au debut de la semaine je cherchais comme un malade mais
la je commence à me calmer
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Je connais ça. On a l'impression que la tête va exploser et on arrive plus à rien.
Je crois que tout le monde y a déjà eu droit à ça.
Le mieux c'est faire un petit break et chercher sur autre chose, sinon la plupart du temps on tourne en rond.

YOYO, @+.
YOYO
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
inet_addr demande une adresse ip (4 nombres avec des points).
Pour résoudre une adresse comme smtp.laposte.net il faut utiliser gethostbyname ou getaddrinfo par exemple.
Aussi, envoyer des commandes sans ce soucier des réponses du serveur c'est pas une bonne idée.
Enfin, fait attention au nombre d'octet que tu envoies dans tes commandes:
send(sock, "DATA\r\n", 8, 0); // 6 octets a envoyer
Messages postés
8
Date d'inscription
mercredi 8 novembre 2000
Statut
Membre
Dernière intervention
20 février 2005

Merci à toi aardman !



Mais malheureusement je n'y arrive toujours pas :



#include <winsock2.h>

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



int main()

{

WSADATA WSAData;

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



SOCKET sock;

SOCKADDR_IN sin;

sin.sin_family = AF_INET;

gethostbyname("smtp.dplanet.ch");

sin.sin_port = htons(25);

sock = socket(AF_INET, SOCK_STREAM, 0);





if(connect(sock,(SOCKADDR*)&sin,sizeof(sin))==0)

{

send(sock, "HELO smtp\r\n", 11, 0);

send(sock, "MAIL From: <dede@yahoo.fr>\r\n", 28, 0);

send(sock, "RCPT To: <logik_suisse@hotmail.com>\r\n", 36, 0);

send(sock, "DATA\r\n", 8, 0);

send(sock, "Subject: Test !!!\r\n\r\n Test\r\n.\r\n", 56, 0);

send(sock, "QUIT\r\n", 6, 0);

}





closesocket(sock);

WSACleanup();

return 0;

}



Merci d'avance
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
Salut,
C'est pas aussi simple que ca, gethostbyname retourne un pointeur sur une structure hostent, et cette structure contient l'ip du site. Si tu ne remplis pas le champ sin_addr de la structure sockaddr_in forcement ca ne marchera pas.
Tu peux aller voir msdn pour savoir comment utiliser gethostbyname, et pour avoir le format de la structure hostent. Et sur ce site, tu trouvera pas mal d'exemples de progs qui utilisent cette fonction.