Acabo de comenzar a aprender acerca de la programación de socket y aprendí acerca de winsock y logré cierto progreso. mi pregunta es básicamente: quiero enviar correos electrónicos, ¿qué debo hacer?Enviando correos electrónicos usando C
puntos que han de mencionarse:
- he aprendido sobre la inicialización de Winsock. Puerto SMTP (25). creando y conectando a sockets con éxito. ¡¡¡¿Qué debería hacer ahora?!!! (Estoy atascado aquí)
- No quiero un código listo para trabajar. Yo quiero aprender. Por lo tanto, se necesitan recomendaciones sobre libros, documentaciones, tutoriales o artículos.
- Sé que C no sabe nada sobre la creación de redes, ¿eso significa que tengo que descargar algunas bibliotecas? (Estoy usando VS2010, Windows 7)
Aquí están los enlaces a páginas que he leído hasta ahora:
guía Winsock básica: http://msdn.microsoft.com/en-us/library/windows/desktop/ms737629(v=vs.85).aspx
He leído las primeras 14 páginas de guía beej (no se puede enviar el enlace, los nuevos usuarios sólo pueden enviar un máximo de dos hipervínculos)
que han aprendido acerca de los tipos (WSADATA
, addrinfo structure
, sockaddr
, SOCKET
) y funciones (WSAStartup()
, WSACleanup()
, getaddrinfo()
, Shutdown()
, WSAGetLastError()
, socket()
, ...)
y acabo de comenzar a leer este artículo sobre SMTP
http://www.faqs.org/rfcs/rfc821.html
aquí es lo que he escrito hasta ahora:
#include <stdio.h>
#include <WinSock2.h>
#include <WS2tcpip.h>
#pragma comment(lib, "Ws2_32.lib") // Applications that use Winsock must be linked with the Ws2_32.lib library file.
#define HTTP_PORT "80"
#define SMTP_PORT "25"
#define HOSTNAME_PORT "101"
/*
All ports and web services names (which are string aliases of the ports
can be found here:
%WINDIR%\system32\drivers\etc\services
*/
int main(void)
{
WSADATA wsdata;
int iresult, retval; //iresult : instant result
SOCKET connect_socket;
struct addrinfo *result, *ptr, hints;
iresult = WSAStartup(MAKEWORD(2, 2), &wsdata);
if(iresult != 0) printf("Initiation of Winsock succeeded.\n");
else
{
printf("WinSock initialization failed..\n");
WSACleanup();
return 0;
}
if(LOBYTE(wsdata.wVersion) == 2 && HIBYTE(wsdata.wVersion) == 2) printf("winsock.dll is found.\n");
else
{
printf("Can not find the required winsock.dll file.\n");
WSACleanup();
return 0;
}
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_UNSPEC; // IPv4 or IPv6
hints.ai_protocol = IPPROTO_TCP; // TCP connection (full duplex)
hints.ai_socktype = SOCK_STREAM; // Provides sequenced, reliable, two-way, connection-based byte streams
connect_socket = socket(hints.ai_family, hints.ai_socktype, hints.ai_protocol);
if(connect_socket == INVALID_SOCKET)
{
printf("Socket Creation failed..\n");
WSACleanup();
return 0;
}
else printf("Socket Creation Succeeded ..\n");
WSACleanup();
return 1;
}
am ¿por supuesto?
te recomiendo leer el excelente libro de Stevens "TCP/IP Illustrated", y también su "avanzada Programación en el entorno Unix ". Sí, sé que dice Unix, pero en realidad es un libro excelente y 'winsock' es básicamente una implementación de la API de socket BSD. – cha0site