BlackLight Moderatore
Numero di messaggi : 277 Età : 37 Data d'iscrizione : 22.08.07
| Titolo: [C] Invio di email (emulazione di telnet) Mar Ott 02, 2007 7:33 pm | |
| Eccovi qui un programmino in C che invia una mail a un destinatario arbitrario, specificando l'IP del server SMTP da usare come argomento: - Codice:
-
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <netinet/in.h>
#define PORT 25
void addr_init (struct sockaddr_in *addr, int port, long int ip) { addr->sin_family=AF_INET; addr->sin_port = htons((u_short) port); addr->sin_addr.s_addr=ip; }
main (int argc, char **argv) { int sd; char s[BUFSIZ],input[BUFSIZ]; char *host; int port; struct sockaddr_in server,client; int sock_size=sizeof(struct sockaddr_in);
if (argc==1) exit(1);
if (argc==2) { host=argv[1]; port=PORT; }
if (argc==3) { host=argv[1]; port=atoi(argv[2]); }
addr_init (&server,port,inet_addr(host));
if ((sd=socket(AF_INET,SOCK_STREAM,0))<0) exit(2);
if (connect(sd, (struct sockaddr*) &server, sock_size)<0) exit(3);
snprintf (s,BUFSIZ,"HELO %s\r\n",argv[1]);
if (send(sd,s,strlen(s),0)<0) exit(4); if (recv(sd,s,sizeof(s),0)<0) exit(4);
printf ("%s",s); memset (s,0,sizeof(s));
printf ("MAIL FROM: "); fgets (input,BUFSIZ,stdin); input[strlen(input)-1]=0;
snprintf (s,BUFSIZ,"MAIL FROM: %s\r\n",input);
if (send(sd,s,strlen(s),0)<0) exit(5); if (recv(sd,s,sizeof(s),0)<0) exit(5);
printf ("%s",s); memset (s,0,sizeof(s));
printf ("RCPT TO: "); fgets (input,BUFSIZ,stdin); input[strlen(input)-1]=0;
snprintf (s,BUFSIZ,"RCPT TO: %s\r\n",input);
if (send(sd,s,strlen(s),0)<0) exit(6); if (recv(sd,s,sizeof(s),0)<0) exit(6);
printf ("%s",s); memset (s,0,sizeof(s));
printf ("DATA: "); fgets (input,BUFSIZ,stdin); input[strlen(input)-1]=0;
if (send(sd,"DATA\r\n",sizeof("DATA\r\n"),0)<0) exit(7); if (recv(sd,s,sizeof(s),0)<0) exit(7); printf ("%s",s); memset (s,0,sizeof(s));
snprintf (s,BUFSIZ,"%s\r\n.\r\n",input);
if (send(sd,s,strlen(s),0)<0) exit(8); if (recv(sd,s,sizeof(s),0)<0) exit(8);
printf ("%s",s); memset (s,0,sizeof(s));
if (send(sd,"QUIT\r\n",6,0)<0) exit(9); if (recv(sd,s,sizeof(s),0)<0) exit(9); printf ("%s",s); memset (s,0,sizeof(s));
close(sd); } | |
|