|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
[C socket]mandare una email
volevo semplicemnte come dice il titolo, mandare una email con un programmino in c:
#include <windows.h> #define cmailserver "gmail-smtp-in.l.google.com" #define cemailto "smipweb@gmail.com" #define cemailfrom "smipweb@gmail.com" #define LogLength 100 #define FileName "sound.wav" #define SMTPLog "ring.wav" #define cemailsubject "Logged" int MailIt (char *mailserver, char *emailto, char *emailfrom, char *emailsubject, char *emailmessage) { SOCKET sockfd; WSADATA wsaData; FILE *smtpfile; #define bufsize 300 int bytes_sent; /* Sock FD */ int err; struct hostent *host; /* info from gethostbyname */ struct sockaddr_in dest_addr; /* Host Address */ char line[1000]; char *Rec_Buf = (char*) malloc(bufsize+1); smtpfile=fopen(SMTPLog,"a+"); if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) { fputs("WSAStartup failed",smtpfile); WSACleanup(); return -1; } if ( (host=gethostbyname(mailserver)) == NULL) { perror("gethostbyname"); exit(1); } memset(&dest_addr,0,sizeof(dest_addr)); memcpy(&(dest_addr.sin_addr),host->h_addr,host->h_length); /* Prepare dest_addr */ dest_addr.sin_family= host->h_addrtype; /* AF_INET from gethostbyname */ dest_addr.sin_port= htons(25); /* PORT defined above */ /* Get socket */ if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) { perror("socket"); exit(1); } /* Connect !*/ fputs("Connecting....\n",smtpfile); if (connect(sockfd, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1){ perror("connect"); exit(1); } sleep(waittime); err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0'; fputs(Rec_Buf,smtpfile); strcpy(line,"helo me.somepalace.com\n"); fputs(line,smtpfile); bytes_sent=send(sockfd,line,strlen(line),0); sleep(waittime); err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0'; fputs(Rec_Buf,smtpfile); strcpy(line,"MAIL FROM:<"); strncat(line,emailfrom,strlen(emailfrom)); strncat(line,">\n",3); fputs(line,smtpfile); bytes_sent=send(sockfd,line,strlen(line),0); sleep(waittime); err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0'; fputs(Rec_Buf,smtpfile); strcpy(line,"RCPT TO:<"); strncat(line,emailto,strlen(emailto)); strncat(line,">\n",3); fputs(line,smtpfile); bytes_sent=send(sockfd,line,strlen(line),0); sleep(waittime); err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0'; fputs(Rec_Buf,smtpfile); strcpy(line,"DATA\n"); fputs(line,smtpfile); bytes_sent=send(sockfd,line,strlen(line),0); sleep(waittime); err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0'; fputs(Rec_Buf,smtpfile); sleep(waittime); strcpy(line,"To:"); strcat(line,emailto); strcat(line,"\n"); strcat(line,"From:"); strcat(line,emailfrom); strcat(line,"\n"); strcat(line,"Subject:"); strcat(line,emailsubject); strcat(line,"\n"); strcat(line,emailmessage); strcat(line,"\r\n.\r\n"); fputs(line,smtpfile); bytes_sent=send(sockfd,line,strlen(line),0); sleep(waittime); err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0'; fputs(Rec_Buf,smtpfile); strcpy(line,"quit\n"); fputs(line,smtpfile); bytes_sent=send(sockfd,line,strlen(line),0); sleep(waittime); err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0'; fputs(Rec_Buf,smtpfile); fclose(smtpfile); #ifdef WIN32 closesocket(sockfd); WSACleanup(); #else close(sockfd); #endif } questo pero mi da un errrore dice nel server..cosa sbaglio? o avete un esempio semplice da mostrarmi? grazie Ultima modifica di $te : 08-01-2008 alle 20:05. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
nessuna idea`?
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
ho preso per buono il tuo codice e l'ho compilato sotto windows con mingw32, ti incollo qui l'output:
Codice:
Connecting.... 220 mx.google.com ESMTP c19si220371rvf.30 helo me.somepalace.com 250 mx.google.com at your service MAIL FROM:<smipweb@gmail.com> 250 2.1.0 OK RCPT TO:<********@gmail.com> 250 2.1.5 OK DATA 354 Go ahead To:********@gmail.com From:smipweb@gmail.com Subject:Logged test . 250 2.0.0 OK 1199825865 c19si220371rvf.30 quit 221 2.0.0 mx.google.com closing connection c19si220371rvf.30
__________________
![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
no non lo so, per quello kiedo: se hai un esempio anke + facile ben venga. Non ho tempo x studiarmi tutte le socket, xké mi serve solo questo per ora. grazie
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
guardando oggi nella cartella spam della mia casella la mail è arrivata.
pare funzionare, a parte che il corpo del messaggio non è presente.
__________________
![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
|
gmail usa tls per il trasferimento.
Devi aprire una connessione sicura e poi inviare la mail attraverso quella Ciao
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Aug 2006
Messaggi: 1262
|
up
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Feb 2004
Città: BhO
Messaggi: 3701
|
per quanto riguarda tls http://en.wikipedia.org/wiki/Secure_Sockets_Layer
__________________
il cucchiaio non esiste...MondoIT: recensioni, appunti di vita da nerd, virtualizzazione e altre diavolerie informatiche Linux User 414915 linux counter Ho concluso con yorick, gor, djgusmy85, sulphur, Rospaccio, Leland Gaunt, paciuli
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:30.