miércoles, 15 de enero de 2014

Enviar un email a gmail sin STARTTLS en C

 Buenas a quien me lea ,(cuatro gatos) ,hoy os traigo un código que a mí me hubiera gustado tener
(cuando no lo tenía xD) ,las empresas que llevan los servers de correo tienen unas políticas férreas
en cuanto a la seguridad, por eso ya no se puede hacer lo de antaño.. ¡Pues yo sí pude! reuniendo códigos
,usando sockets tenemos la forma de enviar en RAW los datos y forzar al server de gaymail.

Sin más qu decir ahí va el código en c (necesitas linkear winsock)Recomiendo Devcpp (gcc)


El enviarmail ya compilado xD

Edit: ya n funciona ,éstas cosas no se deben publicar.
#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 bufsize 300
  
  
  struct hostent *host;  //estructura para gethostbyname
  struct sockaddr_in dest_addr;  
  char almacenar[2500];
  char *Bufferec = (char*) malloc(bufsize+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,bufsize,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,bufsize,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,bufsize,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,bufsize,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,bufsize,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,bufsize,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,bufsize,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,bufsize,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;
    }

martes, 14 de enero de 2014

Mal por Microsoft,se necesita windows 8 para la sdk de windows phone 8 ¬¬

 Saludos  a quien me lea (cuatro gatos) ,hoy vengo a deciros que estoy algo molesto por
algo de microsoft:
Necesitas tener windows 8 para desarrollar aplicaciones para windows 8 mobile.

En concreto ,la sdk de windows 8 phone, y hay que gastarse una pasta en tener el sistema
operativo que a muchos no les gusta,windows 8 .
Mal por esto, ya que para mí con windows 7 ,ya vale para los civiles