/*
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;
    }

Fruto de búsquedas de sources de sockets y wireshark(también algo de cerebro xD)
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
RapidShare.de will permanently shut down the servers on 1. March 2010! nein ..
PD:Policia española psicópata
∩____∩
| (• ◡•)|
Responder

Volver a “Fuentes”