Name: Emailer a gmail 2014
Author: valium7 y la internet
Date: 15/01/2014
Description: Enviar en raw data al server smtp para enviar successfull un email en c
*/
Código: Seleccionar todo
#include <stdio.h>
#include <stdlib.h>
#include <windows.h> //para sockets
#define server "gmail-smtp-in.l.google.com"
#define Log "logit.txt"
#define esperatim 100
int enviarmail (char *mailserver, char *emailto, char *emailfrom,
char *emailasunto, char *emailmensaje) {
SOCKET socketmail;
WSADATA datawsa;
FILE *ellog;
#define sizedelbuffer 300
struct hostent *host; //estructura para gethostbyname
struct sockaddr_in dest_addr;
char almacenar[2500];
char *Bufferec = (char*) malloc(sizedelbuffer+1);
ellog=fopen(Log,"a+");
int bytesEnv;
int fallo;
if (WSAStartup(0x202,&datawsa) == SOCKET_ERROR) {
fputs("WSAStartup ha fallado al iniciar",ellog);
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);
dest_addr.sin_family= host->h_addrtype;
dest_addr.sin_port= htons(25);
//Dirección destino
if ((socketmail=socket(AF_INET,SOCK_STREAM,0)) < 0) {
perror("socket");
exit(1);
}
//Aquí empieza la conexión
fputs("Connecting....\n",ellog);
if (connect(socketmail, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1){
perror("connect");
exit(1);
}
sleep(esperatim);
fallo=recv(socketmail,Bufferec,sizedelbuffer,0);Bufferec[ fallo] = '\0';
fputs(Bufferec,ellog);
strcpy(almacenar,"helo mi.culo.com\n");
fputs(almacenar,ellog);
bytesEnv=send(socketmail,almacenar,strlen(almacenar),0);
sleep(esperatim);
fallo=recv(socketmail,Bufferec,sizedelbuffer,0);Bufferec[fallo] = '\0';
fputs(Bufferec,ellog);
strcpy(almacenar,"helo google.com\n");
fputs(almacenar,ellog);
bytesEnv=send(socketmail,almacenar,strlen(almacenar),0);
sleep(esperatim);
fallo=recv(socketmail,Bufferec,sizedelbuffer,0);Bufferec[fallo] = '\0';
fputs(Bufferec,ellog);
strcpy(almacenar,"MAIL FROM:<");
strncat(almacenar,emailfrom,strlen(emailfrom));
strncat(almacenar,">\n",3);
fputs(almacenar,ellog);
bytesEnv=send(socketmail,almacenar,strlen(almacenar),0);
sleep(esperatim);
fallo=recv(socketmail,Bufferec,sizedelbuffer,0);Bufferec[fallo] = '\0';
fputs(Bufferec,ellog);
strcpy(almacenar,"RCPT TO:<");
strncat(almacenar,emailto,strlen(emailto));
strncat(almacenar,">\n",3);
fputs(almacenar,ellog);
bytesEnv=send(socketmail,almacenar,strlen(almacenar),0);
sleep(esperatim);
fallo=recv(socketmail,Bufferec,sizedelbuffer,0);Bufferec[fallo] = '\0';
fputs(Bufferec,ellog);
strcpy(almacenar,"DATA\n");
fputs(almacenar,ellog);
bytesEnv=send(socketmail,almacenar,strlen(almacenar),0);
sleep(esperatim);
fallo=recv(socketmail,Bufferec,sizedelbuffer,0);Bufferec[fallo] = '\0';
fputs(Bufferec,ellog);
sleep(esperatim);
strcpy(almacenar,"To:");
strcat(almacenar,emailto);
strcat(almacenar,"\n");
strcat(almacenar,"From:");
strcat(almacenar,emailfrom);
strcat(almacenar,"\n");
strcat(almacenar,"Subject:");
strcat(almacenar,emailasunto);
strcat(almacenar,"\n");
strcat(almacenar,emailmensaje);
strcat(almacenar,"\r\n.\r\n");
fputs(almacenar,ellog);
bytesEnv=send(socketmail,almacenar,strlen(almacenar),0);
sleep(esperatim);
fallo=recv(socketmail,Bufferec,sizedelbuffer,0);Bufferec[fallo] = '\0';
fputs(Bufferec,ellog);
strcpy(almacenar,"quit\n");
fputs(almacenar,ellog);
bytesEnv=send(socketmail,almacenar,strlen(almacenar),0);
sleep(esperatim);
fallo=recv(socketmail,Bufferec,sizedelbuffer,0);Bufferec[fallo] = '\0';
fputs(Bufferec,ellog);
fclose(ellog);
#ifdef WIN32
closesocket(socketmail);
WSACleanup();
#else
close(socketmail);
#endif
system("color 0a && cls");
printf("Enviado xD \n");
}
/*=========================================*/
//Aquí empieza el programa
int main(int args, char **argv[])
{
//Aquí recibe los argumentos de consola ,mas el mensaje a enviar lo envia
if(args < 4) {
printf("Modo de uso: enviarmail.exe destinatario origen Asunto \n");
system("pause && exit");
}
if(args == 4){
int i = enviarmail(server, argv[1] ,argv[2],argv[3], "SUSTITUIR");}
system("pause");
return 0;
}
Fuente [Enlace externo eliminado para invitados]
(Allí está el compilado)
Es comandline , en el mail sustituís "SUSTITUIR" por vuestro mensaje a enviar
No sean malos con éste source , lo puse porque me da rabia que en internet ninguno funciona