06/06/10 16:49
gabriele94
ciao ragazi..complimenti per il sito super efficente. Volevo chiedervi un aiuto.
Ho fatto una funzione in c che mi invia le email(ho appena inziato a studiare le socket)..ci sono riuscito pero c'è un problema.. Invio l'email, dopo di che se lo eseguo nuovamente non l'inavia piu. Perche? vi posto il codice
Ho fatto una funzione in c che mi invia le email(ho appena inziato a studiare le socket)..ci sono riuscito pero c'è un problema.. Invio l'email, dopo di che se lo eseguo nuovamente non l'inavia piu. Perche? vi posto il codice
#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"); }
aaa