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 111 112 113 114 115 116 117 118 119 120 121 122
|
// gcc -Wall -o mail mail.c
#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);
}
}
} |
Partager