/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

comunicacion con servidor SMTP

 
      Índice del Foro elrincondelc.com -> Programación en Servidores
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
wmormar



Registrado: 11 Jun 2008
Mensajes: 5

MensajePublicado: 19/06/2008 1:07 am
Título: comunicacion con servidor SMTP

Hola,

alguien ha hecho alguna rutina para conectarse a un servidor SMTP y entablar una comunicación con dicho servidor?

tengo el siguiente código, me he conectado al servidor, pero de ahi no se que hacer para comunicarme y hacer el envio de un correo electrónico.

este es el código:
Código:
#include <unistd.h>
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

#define MAXDATASIZE     255
#define DEFAULT_BUFLEN  512

int ioctlsocket(SOCKET s, long cmd, u_long FAR *argp);

void MandaMail( char *ServidorSMTP, int DEST_PORT )
{
   int sockfd;
   struct sockaddr_in dest_addr; // Guardará la dirección de destino
   struct hostent *hServSMTP;
   char buf[MAXDATASIZE];
   int numbytes;
   long nconnect;
   int nflag;
    u_long iMode = 0;

   /////////////////////////////////////////////////////
   //// Inicio de la Conexión ////
   /////////////////////////////////////////////////////
   WSADATA wsaData;
   if (WSAStartup(MAKEWORD(2, 2), &wsaData) != NO_ERROR)
   {
      MessageBox( NULL, "No se pudo crear el enlace WINSOCK", "INCOS", MB_OK );
       WSACleanup();
      exit(1);
   }
   
   if ((hServSMTP=gethostbyname(ServidorSMTP)) == NULL)
   {
       // Obtener información del host
      MessageBox( NULL, "El dns no existe, verifique...", "INCOS", MB_OK );
       WSACleanup();
      exit(1);
   }

   sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   if (sockfd == INVALID_SOCKET)
   {
       MessageBox( NULL, "No hubo socket", "INCOS", MB_OK );
       WSACleanup();
      exit(1);
   }
   
   dest_addr.sin_family = AF_INET; // Ordenación de máquina
   dest_addr.sin_port = htons(DEST_PORT); // short, Ordenación de la red
   dest_addr.sin_addr=*((struct in_addr *)hServSMTP->h_addr);
   memset(&(dest_addr.sin_zero), '\0', 8); // Poner a cero el resto de la estructura
   
   // Coloca el socket no bloqueado
    //-------------------------
    // Set the socket I/O mode: In this case FIONBIO
    // enables or disables the blocking mode for the
    // socket based on the numerical value of iMode.
    // If iMode = 0, blocking is enabled;
    // If iMode != 0, non-blocking mode is enabled.
    nflag = ioctlsocket(sockfd, FIONBIO, &iMode);
   
    if ( nflag == SOCKET_ERROR )
    {
       MessageBox( NULL, "No se puede desbloquear el socket...", "INCOS", MB_OK );
       WSACleanup();
      exit(1);
    }
   
   nconnect = connect(sockfd, (struct sockaddr *) &dest_addr, sizeof(struct sockaddr));
   if ( nconnect == SOCKET_ERROR )
   {
       MessageBox( NULL, "No hubo conexión al socket", "INCOS", MB_OK );
       WSACleanup();
      exit(1);
    }
    else
    {
       MessageBox( NULL, ServidorSMTP, "Conectado a...", MB_OK );
   }
   
   /////////////////////////////////////////////////////
   //// Fin de la Conexion ////
   /////////////////////////////////////////////////////
   shutdown(sockfd,2);
   closesocket(sockfd);
   WSACleanup();
}


Alguien podría decirme que sigue para hacer el envio de un correo?

saludos y gracias de antemano

William Morales
Tabasco, México
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 2558
Ubicación: Valladolid (España)

MensajePublicado: 19/06/2008 7:42 am
Título:

Busca en la red el RFC 821, ahí se especifican como se establecen todas las reglas para el protocolo SMTP.

Muevo el post al subforo programacion de servidores

S2.
_________________
La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí.
Volver arriba
wmormar



Registrado: 11 Jun 2008
Mensajes: 5

MensajePublicado: 19/06/2008 11:49 am
Título:

cheroky,

gracias por tomarte el tiempo para contestar.

pero, siempre un pero. Resulta que he leido los RFC correspondientes, lo que me gustaria saber es como le hago para tener esa comunicación. Sólo he podido llegar a la conexión, pero de ahi en adelante, no se que funcion tomar para hacer "la charla" con el servidor SMTP.

Te agradezco de antemano tu ayuda

William Morales

cheroky escribió:
Busca en la red el RFC 821, ahí se especifican como se establecen todas las reglas para el protocolo SMTP.

Muevo el post al subforo programacion de servidores

S2.
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 2558
Ubicación: Valladolid (España)

MensajePublicado: 20/06/2008 8:05 am
Título:

Tendrás que usar send para enviar las cadenas de caracteres tal como especifica el protocolo y recv para analizar lo que recibes. En la red encontraras ejemplos tanto de como usar estas funciones como implementaciones basadas en streams sockets (como en tu caso) de telnet, irc, ssh, smtp, etc

S2.
_________________
La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí.
Volver arriba
wmormar



Registrado: 11 Jun 2008
Mensajes: 5

MensajePublicado: 20/06/2008 11:05 am
Título:

cheroky,

he leído la información acerca de las funciones que comentas, aunque sigo sin poder leer nada desde el servidor. Podrías checar el código enviado, por si hay alguna mala aplicación de la conexión o falta algo por hacer?

saludos de antemano

cheroky escribió:
Tendrás que usar send para enviar las cadenas de caracteres tal como especifica el protocolo y recv para analizar lo que recibes. En la red encontraras ejemplos tanto de como usar estas funciones como implementaciones basadas en streams sockets (como en tu caso) de telnet, irc, ssh, smtp, etc

S2.
Volver arriba
      Índice del Foro elrincondelc.com -> Programación en Servidores
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com