#include <stdio.h> //Input/output Standard (es:printf()…)
#include <stdlib.h>
#include <winsock.h> //API winsock
#include <windows.h>
typedef char stringa[500];
WSADATA data; //La struttura WSADATA contiene informazioni sull’implementazione
//delle socket windows
WORD versione; //preparo la variabile che tiene la versione di socket windows che il chiamante può usare.
SOCKET conn; //Creare un elemento di tipo socket chiamato conn:
FILE *fmail; //creo un puntatore al file
char buf[1500]; //variabile dove vado ad inserire temporaneamente destinatario,mittente, oggetto che poi immetto nell'email
int err=0;
char end[7];
char input;
char mess[1000];
int n=0;
LPHOSTENT host; //restituisce una struttura di tipo "hostent" in cui mette
//l'indirizzo IP. Riceve in ingresso il nome dell'host che puo' essere
//un nome, in indirizzo IPv4 o un indirizzo IPv6.
//Nel caso di IPv4 o IPv6, il campo "indirizzo_host->h_addr" contiene il nome stesso.
//indirizzo_host=gethostbyname("nome.inventato.it");
//Se hp contiene il puntatore nullo, allora la chiamata a gethostbyname e' fallita.
char Mittente[50]="provai@hotmail.it"; //imposto il mittente
char Destinatario[50]="alauraXX@gmail.com"; //imposto il destinatario
char Oggetto[50]="email"; //imposto l'ogetto del messaggio
main()
{
fmail=fopen("testo.txt","r"); //controllo se esiste il file e se ho i permessi per aprirlo
if (fmail==NULL){
printf("file esiste"); //se qualcosa va storto esco
}
versione=MAKEWORD(2,0); //versione di socket windows che il chiamante può usare.
WSAStartup(versione,&data); //specifica il numero di versione di winsock sul
//sistema e lo costruisce correttamente
int lun; //conterra il numero che indica la lunghezza della struttura della socket
conn=socket(PF_INET,SOCK_STREAM,0); //Crea una socket dedicata ad un fornitore di servizi specifico
//Tipo: PF_INET , descrizione:
//In questo esempio la funzione
//usa l’internet address family,
//con socket di tipo stream e
//protocollo TCP/IP (? “0”)
//Tipo: SOCK_STREAM, descrizione:
//Fornisce una connessione sequenziale,
//affidabile e full-duplex. Il protocollo TCP
//è basato su questo tipo di socket.
SOCKADDR_IN conn_addr; //creo la struttura della socket (sockaddr)
conn_addr.sin_family=PF_INET; //Forma di sockaddr In AF_INET poiche utilizziamo il protocollo ip
//ip v4
conn_addr.sin_port=htons(25); //assegnando la porta 25
host=gethostbyname ("mail.tin.it"); //prendo l'indirizzo ip di mail.tin.it
if (host==NULL) //controllo se l'ip e valido altrimenti esco
printf("host ok");
conn_addr.sin_addr = *((LPIN_ADDR)*host->h_addr_list);
lun=sizeof(struct sockaddr); //prendo la lunghezza della socket per poi passarla alla funzione creazione
err=connect(conn,(struct sockaddr*)&conn_addr,lun); //Chiamo la funzione connect () passando come parametri la socket
//creata e settata all’ascolto e la struttura sockaddr_in.
if (err!=0) //Verifico la presenza di errori
{
err=WSAGetLastError();
printf("Errore della Socket\t%d",err);
}
char mess[1000]; //dichiaro variabile dove salvero i messaggi del server
n=recv(conn,mess,200,0);
mess[n]=0;
printf(mess,"%s");
sprintf(buf, "helo inviamail\nmail from:<send@email.it>\nrcpt to:<%s>\ndata\n",Destinatario);
send(conn, buf, strlen(buf), 0);
printf(buf);
sprintf(buf, "From: %s\n",Mittente);
send(conn, buf, strlen(buf), 0);
sprintf(buf, "To: %s\n",Destinatario);
send(conn, buf, strlen(buf), 0);
sprintf(buf, "Subject: %s\n",Oggetto);
send(conn, buf, strlen(buf), 0);
while (feof(fmail)==0){
fscanf (fmail,"%c",&input);
send (conn,&input,1,0);
}
sprintf(buf, "\n.\n");
printf(buf);
send(conn, buf, strlen(buf), 0);
fclose(fmail);
sprintf(end,"quit\n");
send(conn,end,strlen(end),0);
n=recv(conn,mess,200,0);
mess[n]=0;
printf(mess,"%s");
closesocket(conn); //chiude la socket (chiude la connessione)
WSACleanup();
system("del log.txt");
}