| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
wmormar
Registrado: 11 Jun 2008 Mensajes: 5
| Publicado: 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)
| Publicado: 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
| Publicado: 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)
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |