Trucos Webmaster
           
Inicio Hosting Registro de Dominios Hosting Resellers Servidores Dedicados Certificados SSL
INICIO
MAS VISTOS
MAS IMPRIMIDOS
FOROS WEBMASTERS
» 5 Ventajas del marketing online bilingüe...
» Redactores para CuartoGeek.net...
» phpadmin con Mvixpvr...
» Únete a nosotros! MasGeek.net...
» MasGeek.Net ¿Sos un Geek?...
» Php-snmp...
» Intercambio de enlaces...
» Fadictos! Comunidad Gammer...
» En venta Apple iphone 3gs 32gb...
» En venta Nikon D80 Digital Camera 400usd...
nuevo post | más posts
.com .net .org .es .eu
Registro Dominio
+ Redirección
+ 5 cuentas correo

Solo 12 euros año
WEBS DE INTERES:
Trucos
Programas Gratis
Manuales Gratis
Blog Informática
Trucos Juegos
Trucos PC
Listas
Trucos PC
Descarga Programas
Manuales Gratis
Tutoriales
Software
Trucos Informática
Noticias Internet
Trucos MSN
Foros Informática
PHP Adictos
Manuales
Manuales Online
Trucos Juegos
Tienda Informática
Servidores VPS

Categoría: C

Enviar email desde C

Lo primero que deberemos hacer, en una función que reciba una dirección de internet, es resolverla mediante la función gethostbyname (Aunque nos hayan introducido una dirección IP), pues de esa manera, hacemos mucho más independiente el programa. Ya hay escrito un articulo al respecto.

El siguiente paso a ralizar, es crear un socket, con la función socket, que nos devolverá un entero; Este entero será el canal de comunicaciones que emplearemos. A esta función se le pasan tres parametros, el primero es en tipo de dirección (En nuestro caso AF_INET), el segundo es si será una conexión UDP o TCP (SOCK_STREAM en nuestro caso, que es una conexión TCP), y el tercer parámetro es el protocolo que se empleará en la conexión (Depende del primer parametro, en nuestro caso 0), de manera que nos quedaría:

sockfd = socket(AF_INET, SOCK_STREAM, 0);

Si nos devuelve un valor menor que 0, entonces no se ha podido abrir el canal de comunicaciones..

El siguiente paso es rellenar la estructura sockaddr_in, en la que pondremos los datos de la máquina a la que nos conectamos (Ponderemos el puerto, la dirección resuelta obtenida de gethostbyname, que nos conectamos a traves de la red Ip, e inicializaremos el resto a 0). Consultar el ejemplo al final de el artículo.

Y el último paso es la comunicación en si misma. Esta depende del protocolo utilizado. En caso del protocolo SMTP, El cliente manda una línea (Acabada en el caracter de salto de línea), y el servidor responde con otra, salvo qu el cliente haya enviado la instrucción data.

Una vez terminada la comunicación, es MUY importante cerrar las comunicaciones, para lo que emplearemos la función shutdown, en la que le especificaremos el socket a cerrar, y lo que queremos que cierre (En nuestro caso, 2, que es que cierre totalmente el canal)

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#ifndef WIN32
    #include <netdb.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
#else
    #include <windows.h>
    #include <winsock.h>
#endif


#define DEST_PORT    25
#define MAXDATASIZE    255
//A�adir en el proyecto la librer�a wsock32.lib

void MandaMail(char * ServidorSMTP);

#ifdef WIN32
    int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow )
    {
        MandaMail("smtp.servidor.es");

        return 1;
    }
#else
    int main(int argc, char *argv[])
    {
        MandaMail("smtp.sevidor.es");
        return 1;
    }
#endif


void MandaMail(char * ServidorSMTP)
{
    int sockfd;
    struct sockaddr_in dest_addr;   // Guardar� la direcci�n de destino
    struct hostent *hServSMTP;
    char buf[MAXDATASIZE];
    int numbytes;
/*/////////////////////////////////////////////////////
////            Inicio de la Conexi�n              ////
/////////////////////////////////////////////////////*/
#ifdef WIN32
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {

        //cerr << "WSAStartup fallo";
        exit(1);
        }
#endif
    if ((hServSMTP=gethostbyname(ServidorSMTP)) == NULL) {  // Obtener informaci�n del host
        perror ("No se ha podido usar el DNS");
        exit(1);
        }

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    {
        perror ("No se ha podido conseguir un socket");
    }

    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), '', 8);  // Poner a cero el resto de la estructura
    if (connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)) == -1) {
            perror("connect");
            exit(1);
        }

/*/////////////////////////////////////////////////////
////         Envio en si mismo                     ////
/////////////////////////////////////////////////////*/
    if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {

        perror("recv");
        exit(1);
        }
    buf[numbytes] = '';
    if (send(sockfd, "helo servidor.esn", 15, 0) == -1)
        perror("send");
    numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0);
    buf[numbytes] = '';
    send(sockfd, "mail from:
direccionorigen@servidor.esn", 29, 0);
    numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0);
    buf[numbytes] = '';
    send(sockfd, "rcpt to:
direcciondestino@servidor.esn", 31, 0);
    numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0);
    buf[numbytes] = '';
    send(sockfd, "datan", 5, 0);
    numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0);
    buf[numbytes] = '';

    send(sockfd, "mail from: direccionorigen@servidor.esn.n", 31, 0);
    numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0);
    buf[numbytes] = '';


/*/////////////////////////////////////////////////////
////              Fin de la Conexion               ////
/////////////////////////////////////////////////////*/
shutdown(sockfd,2);
#ifdef WIN32
    closesocket(sockfd);
    WSACleanup() ;
#endif
}
  


Visitas: 407    Fecha: 2010-07-02
Te ha resultado interesante?
 
SI
NO
 
Categorias
Diseño Banners
Diseño Gráfico
Diseño Web
Dominios
Hosting
PHP-NUKE
Promoción Web
Programación
Posicionamiento web en Google? El tutorial que te proponemos te ayudará a conseguir un buen posicionamiento web ...
Consejos para un buen diseño web
A medida que crecemos en nuestra profesion nos damos cuenta de ciertas cosas que debemos tener en cuenta a la hora de diseñar o rediseñar un WebSite ...
Programación de páginas web - La importancia de código limpio La manera de construir una página web puede repercutir sobre la capacidad de un robot para leerla e indexar sus contenidos ...
Optimización de una página web
A medida que crecemos en nuestra profesion nos damos cuenta de ciertas cosas que debemos tener en cuenta a la hora de diseñar o rediseñar un WebSite ...
El banner y la publicidad en Internet Para comenzar os diremos que un BANNER es un pequeño soporte publicitario virtual que enlaza a unas páginas con otras ...
 
©2009 Evidalia Web SL