Je viens de commencer à apprendre à propos de la programmation de socket et appris sur Winsock et a réalisé des progrès. Ma question est fondamentalement: je veux envoyer des courriels, que dois-je faire?
points à mentionner: p>
Voici les liens vers des pages que j'ai lues jusqu'à présent: p>
Guide Winsock de base: http://msdn.microsoft.com/en-us/library/windows/desktop/ms737629 (v = vs.85) .aspx p>
J'ai lu les 14 premières pages du Guide Beej (ne peut pas publier le lien, de nouveaux utilisateurs ne peuvent que publier un maximum de deux hyperliens) P>
i ont appris sur les types ( et je viens de commencer à lire cet article sur Voici ce que j'ai écrit jusqu'à présent : P> wsadata code>,
Structure addrinfo code>,
sockaddr code>,
socket code>) et fonctions (
wsastartup () code>,
wsacleanup () code>,
gettaddrinfo () code>,
fermeture () code>,
wsagetlasterror () code> ,
socket () code>, ...) p>
smtp code> http://www.faqs.org/rfcs/rfc821.html p>
#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;
}
5 Réponses :
Vous devez consulter Quelques exemples sur SMTP via Telnet :)
Fondamentalement, vous devez entrer dans un autre élément comme celui-ci: p>
J'ai passé quelque chose comme ça, mais je ne pouvais pas comprendre quoi faire avec ça? Je veux dire où mettre ce texte? et pourquoi? Que signifie "Helo" (je pense dire bonjour au serveur)?
@joker le mettre dans telnet: en.wikipedia.org/wiki/telnet Il y a même un programme pour cela dans Windows nommé identique.
@joker: 'Dans la commande Helo, l'hôte Envoi de la commande s'identifie; La commande peut être interprétée comme indiquant "Bonjour, je suis
N'oubliez pas de lire et de traiter les réponses du serveur à chaque commande! C'est très important.
@Vyktor: Merci beaucoup pour votre aide et préoccupez votre réponse avec celle ci-dessus, je peux maintenant faire le programme. Je peux maintenant comprendre l'idée de parler au serveur. Le problème que je suis confronté est de savoir comment traiter avec SSL et TLS (je vais googler cela)
Je vais documenter ce que j'ai compris jusqu'à présent afin que toute recherche du même sujet puisse trouver la réponse facilement. Je ne sais pas où poster la phrase précédente afin que quiconque voit ce sujet, peut voir le lien vers le document.
Vous devriez lire comment utiliser SMTP sur telnet a >. Après cela, vous pouvez facilement le mettre en œuvre .. P>
J'ai lu la page liée à. J'ai appris quelques choses, mais cela semble être obsolète. Je devais rechercher le "Menu Connect" et le port pour ouvrir le serveur de messagerie Yahoo (car 25 est entré, la connexion échoue) Votre aide est très appréciée
Je vous recommanderais cet article: p>
Vous pouvez également le compiler sous Linux et Windows. P>
+1 Vous pouvez écrire votre propre client SMTP, mais il est certainement plus facile d'utiliser l'un des nombreux pouvant être trouvés sur les interwebs.
Vous pouvez également vérifier le code source des clients de messagerie open source tels que Sendmail.
RFC 5321 est la spécification officielle du protocole SMTP de base. P>
RFC 2822 est la spécification officielle du format de courrier électronique de base. P>
Sachez qu'il existe de nombreux RFC supplémentaires qui étendent les règles de base. Par exemple, RFC 1651 prolonge SMTP de sorte que des fonctionnalités supplémentaires peuvent ensuite être implémentées, telles que l'authentification sécurisée via la extension d'authentification . Et mime (rfcs 2045 , 2046 , 2047 , aller à site Web de l'IETF pour voir toutes les spécifications RFC disponibles utilisées par la plupart des protocoles d'InterPet. P>
bytes_to_receive = sizeof(packet) received_bytes = 0; do { received_bytes += recv(buffer + received_bytes, bytes_to_receive - received_bytes) } while (received_bytes != bytes_to_receive)
Pourriez-vous élaborer davantage votre réponse en ajoutant un peu plus de description sur la solution que vous fournissez?
Je vous recommanderais de lire l'excellent livre "TCP / IP illustré" de Stevens, ainsi que sa "programmation avancée dans l'environnement UNIX". Oui, je sais que cela dit Unix, mais c'est vraiment un excellent livre et
winsock code> est essentiellement une implémentation de l'API de socket BSD.