Bonjour,

J'ai trouvé le code ci dessous qui est censé envoyer un e-mail en C, le truc c'est que je ne sais pas trop ce qu'est un serveur smtp et du coup je ne peux pas tester ce code pour l'étudier.
Ma question est donc : comment je fais pour savoir quel serveur utiliser avec quelle adresse mail et les différents paramètre que je doit connaitre ?

Merci

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <stdio.h>	// pour puts()
#include <string.h>	// pour bzero() bcopy() strlen()
 
//includes réseau
#include <unistd.h>	// pour close()
#include <netdb.h>	// pour gethostbyname()
#include <arpa/inet.h>  // pour sockaddr_in
 
int sk = -1;		//le descripteur du socket
 
char serveur[] = "smtp.wanadoo.fr";
 
char lemail[] = "HELO wanadoo.fr\r\n"
		"MAIL FROM: <blabla@orange.fr>\n"
		"RCPT TO: <truc@truc.fr>\n"
		"DATA\r\n"
		"Subject: le mur et les oreilles\r\n"
 		"FROM: François <blabla@orange.fr>\r\n"
		"TO: Segolene <truc@unautre.fr>\r\n"
		"Bijour\r\n"
		"petit message\r\n"
		".\r\n"
		"QUIT\r\n\r\n";
 
//Déclaration des Prototypes de fonctions
unsigned short init_socket();
void recevoir_reponse();
 
int main (int argc, char *argv[])
{
 
	if (init_socket())
	{
	send(sk, lemail, strlen(lemail)-1, 0);
	recevoir_reponse(); //fermera le socket.
	}
 
	return 0;
}
 
unsigned short init_socket()
{
	struct sockaddr_in serveurSockAddr;	// addresse
	struct hostent *serveurHostEnt;		// description host serveur
	unsigned long hostAddr;			// addr du serveur
 
	bzero(&serveurSockAddr,sizeof(serveurSockAddr));
	hostAddr = inet_addr(serveur); // convertit l'adresse ip en entier long
 
	if ( (long)hostAddr != (long)-1)
		bcopy(&hostAddr,&serveurSockAddr.sin_addr,sizeof(hostAddr));
	else  // on a donné un nom, pas une IP
	{
 		serveurHostEnt = gethostbyname(serveur);
		if (serveurHostEnt == NULL)
  		{
			puts("probleme gethost");
			return 0;
		}
 		bcopy(serveurHostEnt->h_addr,&serveurSockAddr.sin_addr, serveurHostEnt->h_length);
	}
 
	serveurSockAddr.sin_port = htons(25); //port 25 pour SMTP
	serveurSockAddr.sin_family = AF_INET;
 
	if ( (sk = socket(AF_INET,SOCK_STREAM,0)) < 0)
	{
		puts("Impossible de creer le socket");
		return 0;
 	}
 
	if(connect(sk,(struct sockaddr *)&serveurSockAddr, sizeof(serveurSockAddr)) < 0)
	{
		puts("probleme sur connect()");
		return 0;
	}
	else
	{
		printf("Connecté au serveur %s\n",serveur);
		return 1;
	}
}
 
void recevoir_reponse()
{
	puts("En attente de la reponse ...\n");
	char  tempBuffer[1024];
	int retval;
 
	while(1)
	{
	    retval = recv(sk, tempBuffer, sizeof(tempBuffer)-1, 0);
	    if (retval==0)
	    { 
			shutdown(sk,2); //ferme le socket
			close(sk);
			puts("Socket fermé.");
	        break;
	    }
	    else if (retval == -1)
	    {
	        puts("Erreur pendant la reception");
	    }
	    else
	    {
	        tempBuffer[retval] = 0;
	        puts(tempBuffer);
	    }
	}
}