Buenas alguien podria ayudarme con esto XD
Siempre me tome poco interes en network programming ( Sockets, TCP, etc ) pero siempre he querido enviar un email usando SMTP,
segun tengo entendido con SMTP se puede enviar a cualquier tipo de cuenta no? ( gmail, hotmail , yahoo , etc )
y encontre este codigo en la red, pero creo que no tengo algunas librerias... pero no se supone que SMTP es "portable" ?
bueno honestamente sé nada sobre ello, y por ahora no estoy del todo interesado al aprendizaje profundo sobre ello, así que me gustaria
saber quien puede decirme donde debo leer, o que buscar solamente para aprender a programar un SMTP XD y enviar un email
#include<iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
using namespace std;
#define HELO "HELO 192.168.1.1\r\n"
#define DATA "DATA\r\n"
#define QUIT "QUIT\r\n"
//#define h_addr h_addr_list[0]
//FILE *fin;
int sock;
struct sockaddr_in server;
struct hostent *hp, *gethostbyname();
char buf[BUFSIZ+1];
int len;
char *host_id="192.168.1.10";
char *from_id="rameshgoli@domain.com";
char *to_id="rameshgoli@domain.com";
char *sub="testmail\r\n";
char wkstr[100]="hello how r u\r\n";
/*=====Send a string to the socket=====*/
void send_socket(char *s)
{
write(sock,s,strlen(s));
write(1,s,strlen(s));
//printf("Client:%s\n",s);
}
//=====Read a string from the socket=====*/
void read_socket()
{
len = read(sock,buf,BUFSIZ);
write(1,buf,len);
//printf("Server:%s\n",buf);
}
/*=====MAIN=====*/
int main(int argc, char* argv[])
{
/*=====Create Socket=====*/
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock==-1)
{
perror("opening stream socket");
exit(1);
}
else
cout << "socket created\n";
/*=====Verify host=====*/
server.sin_family = AF_INET;
hp = gethostbyname(host_id);
if (hp==(struct hostent *) 0)
{
fprintf(stderr, "%s: unknown host\n", host_id);
exit(2);
}
/*=====Connect to port 25 on remote host=====*/
memcpy((char *) &server.sin_addr, (char *) hp->h_addr, hp->h_length);
server.sin_port=htons(25); /* SMTP PORT */
if (connect(sock, (struct sockaddr *) &server, sizeof server)==-1)
{
perror("connecting stream socket");
exit(1);
}
else
cout << "Connected\n";
/*=====Write some data then read some =====*/
read_socket(); /* SMTP Server logon string */
send_socket(HELO); /* introduce ourselves */
read_socket(); /*Read reply */
send_socket("MAIL FROM: ");
send_socket(from_id);
send_socket("\r\n");
read_socket(); /* Sender OK */
send_socket("VRFY ");
send_socket(from_id);
send_socket("\r\n");
read_socket(); // Sender OK */
send_socket("RCPT TO: "); /*Mail to*/
send_socket(to_id);
send_socket("\r\n");
read_socket(); // Recipient OK*/
send_socket(DATA);// body to follow*/
send_socket("Subject: ");
send_socket(sub);
read_socket(); // Recipient OK*/
send_socket(wkstr);
send_socket(".\r\n");
read_socket();
send_socket(QUIT); /* quit */
read_socket(); // log off */
//=====Close socket and finish=====*/
close(sock);
exit(0);
}
Aquí te lo dejo de nuevo
http://tools.ietf.org/html/rfc2821
Dulces Lunas!¡.
Cita de: BlackZeroX (Astaroth) en 5 Septiembre 2012, 05:26 AM
Yo ya te envie por PM la url del formato SMTP no hace mucho...
Dulces Lunas!¡.
Cierto XD solo lei lo principio y lueg no lo continue :P es que honestamente no me llama nada la atencion pero es tan indispensable XD
ahora que lo veo bien esto trata sobre el SMTP pero creo que no lo aplica a C/C++ verdad? y es que estoy buscando algo introductorio
así como que librerias debo usar, funciones, etc
Lo que te deje es el Standart del SMTP te guste o no así vas a estar encontrando información VERÍDICA y puede ser procesada esa información de diversas maneras, los diversos servidores SMTP, sus programadores tuvieron que ver este tipo de documentos que no están orientados a ningún lenguaje mas que para que quien lo lea lo comprenda y lo aplique tal cual pasa con la MATEMÁTICA.
Habitualmente estos documentos te dan un ejemplo(s) pero no orientados a la programación si no a tu compresión; Las librerías a incluir y las funciones de DEBES CREAR por ti mismo o copiar algunas ya realizadas es otra cosa muy ajena a un formato, en este caso el formato del protocolo del SMTP...
Sera mejor que practiques con Sockets antes de meterte con algo así o no sabrás ni que estas haciendo.
Aquí están unos escenarios (ejemplos) donde la S: significa lo que arroja el servidor y C: lo que arroja el cliente...
http://tools.ietf.org/html/rfc2821#appendix-D.1
Dulces Lunas!¡.
EI: juntando mensajes.
Busca aquí el formato documento que necesites...
http://tools.ietf.org/rfc/index
Este es del año (2012).
RFC6710 (http://tools.ietf.org/html/6710) Simple Mail Transfer Protocol Extension for Message Transfer
Priorities. A. Melnikov, K. Carlberg. August 2012. (Format: TXT=59966 bytes) (Status: PROPOSED STANDARD)
Dulces Lunas!¡.
Gracias por la Info BlackZeroX :)