E-Mail abholen und senden
-
Ich hab das Problem, das ich mit dem unten angeführten Code versuche die Emails abzuholen, kommt ein error. Wenn ich versuche eine Email zu schreiben kommt ein Timeout vom smtp-Server.(Ich hab die angaben für smtp entsprechend geändert).
#include <windows.h> #include <winsock2.h> #include <stdio.h>//Prototypen #include <iostream> using namespace std; int startWinsock(void); long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr) { long rc; unsigned long ip; HOSTENT* he; /* Parameter prüfen */ if(hostnameOrIp==NULL || addr==NULL) return SOCKET_ERROR; /* eine IP in hostnameOrIp ? */ ip=inet_addr(hostnameOrIp); /* bei einem fehler liefert inet_addr den Rückgabewert INADDR_NONE */ if(ip!=INADDR_NONE) { addr->sin_addr.s_addr=ip; return 0; } else { /* Hostname in hostnameOrIp auflösen */ he=gethostbyname(hostnameOrIp); if(he==NULL) { return SOCKET_ERROR; } else { /*die 4 Bytes der IP von he nach addr kopieren */ memcpy(&(addr->sin_addr),he->h_addr_list[0],4); } return 0; } } void wait () { std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); } int main() { long rc; SOCKET s; SOCKADDR_IN addr; rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket erstellt!\n"); } memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten addr.sin_family=AF_INET; addr.sin_port=htons(110); // wir verwenden mal port 12345 //addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener rc=getAddrFromString("pop.web.de",&addr); if(rc==SOCKET_ERROR) { printf("IP für %s konnte nicht aufgeloest werden\n"); return 1; } else { printf("IP aufgeloest!\n"); } rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(rc==SOCKET_ERROR) { printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError()); //return 1; } else { cout << "Verbunden mit smtp.web.de" << endl; } int zahl = 0; char puffer[255] = " "; zahl = recv(s, puffer, 255, 0); if (zahl==SOCKET_ERROR) cout << "Error"<< endl; cout << zahl << endl; cout << puffer << endl; strcpy(puffer, " "); Sleep(1000); zahl = send(s, "USER xxx@web.de\0",17,0); if (zahl==SOCKET_ERROR) cout << "Error"<< endl; cout << zahl << endl; zahl = recv(s, puffer, 255, 0); if (zahl==SOCKET_ERROR) cout << "Error"<< endl; cout << zahl << endl; cout << puffer << endl; strcpy(puffer, " "); Sleep(1000); zahl = send(s, "PASS PASSWORT\0", 17, 0); if (zahl==SOCKET_ERROR) cout << "Error"<< endl; cout << zahl << endl; Sleep(100); zahl = recv(s, puffer, 255, 0); if (zahl==SOCKET_ERROR) cout << "Error"<< endl; cout << zahl << endl; cout << puffer << endl; wait(); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }