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
| #include <time.h>
#define SOCKET_ERROR -1
#define TAILLE_BUFFER 20000
typedef struct sockaddr_in SOCKADDR_IN;
typedef struct sockaddr SOCKADDR;
typedef int SOCKET;
void questionnaire(char *serveur, char *hello, char *expediteur, char *destinataire, char *message, char *sujet, char *corps, char *destinataire2, char* expediteur2, char *data);
void entrerChaine(char *buffer);
int main(int argc, char *argv[])
{
//Initialisation des variables
char serveur[512] ="" ;
char hello[512] = "";
char expediteur[512] = "";
char expediteur2[512] = "";
char destinataire[512] = "";
char destinataire2[512] = "";
char sujet[512]="";
char data[] ="DATA\r\n";
char message[30000] = "";
char quit[] = "QUIT\n";
char buffer[20000];
char corps[20000] = "";
SOCKADDR_IN sin;
int sock_err;
struct hostent *strAdresse;
SOCKET serveurSock;
questionnaire(serveur, hello, expediteur, destinataire, message, sujet, corps, destinataire2, expediteur2, data);
//On a donné l'adresse du serveur sous forme de nom de domaine, il faut donc la convertir
strAdresse = gethostbyname(serveur);
bcopy(strAdresse->h_addr,&sin.sin_addr, strAdresse->h_length);
sin.sin_family = AF_INET;
sin.sin_port = htons(25);
//Attribution de la socket
serveurSock = socket(AF_INET, SOCK_STREAM, 0);
if(serveurSock != SOCKET_ERROR)
{
printf("Socker numero : %d attribuée\n", serveurSock);
sock_err = connect(serveurSock, (SOCKADDR*)&sin, sizeof(sin));
if(sock_err != SOCKET_ERROR)//Si la connection a réussie
{
printf("Nous voila à présent connecté\n");
send(serveurSock, message, sizeof(message), 0);
sock_err=recv(serveurSock, buffer, sizeof(buffer), 0);
write(STDOUT_FILENO, buffer, sizeof(sock_err));
}
}
close(serveurSock);
return 0;
}
void questionnaire(char *serveur, char *hello, char *expediteur, char *destinataire, char *message, char *sujet, char *corps, char *destinataire2, char* expediteur2, char *data)
{
char buffer[TAILLE_BUFFER] = "";
printf("\nEntrez le nom de votre fournisseur d'acces : ");
entrerChaine(buffer);
sprintf(serveur, "smtp.%s.fr", buffer);
printf("\nVotre serveur smtp est \"%s\"\n", serveur);
sprintf(hello, "HELO %s.fr\r\n", buffer);
printf("\nEntrez l'adresse de l'expéditeur (votre adresse) : ");
entrerChaine(buffer);
sprintf(expediteur2, "FROM: <%s>\r\n", buffer);
sprintf(expediteur, "MAIL FROM: <%s>\r\n", buffer);
printf("\nCommande expediteur : \"%s\"\n", expediteur);
printf("\nEntrez l'adresse de votre correspondant : ");
entrerChaine(buffer);
sprintf(destinataire2, "TO: <%s>\r\n", buffer);
sprintf(destinataire, "RCPT TO: <%s>\r\n", buffer);
printf("\nCommande destinataire : \"%s\"\n", destinataire);
printf("\nEntrez le sujet du message : ");
entrerChaine(buffer);
sprintf(sujet, "Subject: <%s>\r\n", buffer);
printf("\nSujet : \"%s\"\n", sujet);
printf("\nEntrez le corps du message : ");
entrerChaine(buffer);
sprintf(corps, "%s", buffer);
printf("\nMessage : \"%s\"\n", corps);
sprintf(message, "%s%s%s%s%s%s%s%s\n.\r\nQUIT\n", hello, expediteur, destinataire, data, sujet, expediteur2, destinataire2, corps);
printf("\nMessage : \"%s\"\n", message);
}
void entrerChaine(char *buffer)
{
int i, t;
fgets(buffer, (TAILLE_BUFFER*sizeof(char)), stdin);
for(i=0; i<TAILLE_BUFFER; ++i)
{
if(buffer[i]=='\n')
{
buffer[i] = 0;
i = TAILLE_BUFFER;
}
if(buffer[i] == '\0')
{
i = TAILLE_BUFFER;
}
}
} |
Partager