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); }
-
1. Was für ein error kommt?
2. Forum WinAPI wäre besser.
Simon
-
bei smtp kommt timeout vom server. Bei pop3 gibt recv -1 zurück.
mfg liggi1980
-
-1 bei recv() bedeuetet SOCKET_ERROR und mit WSAGetLastError() kann der detailierte Error Code geholt werden. Ich würde das tun.
PS: deinen Code habe ich gar nicht gesichtet.
-
Hinweis: WSACleanup muss aufgerufen werden, wenn WinSock nicht mehr benötigt wird.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
im Momment geht die Verbindung immer verloren und es wird 0 zurück gegeben.
mfg liggi1980
-
im Momment geht die Verbindung immer verloren und es wird 0 zurück gegeben.
wo wird 0 zurückgegeben.
Je besser Du dein Problem beschreibst, desto besser kann geantwortet werden.
-
recv gibt 0 zurück wenn die Verbindung unterbrochen wurde.
mfg liggi1980
-
aha... du rufst ja nicht nur einmal recv auf.. also welche zeile?
-
ich bekomme die meldung das ich verbunden bin dann sende ich den Benutzername und dann dauerts etwas und dann ist die Verbindung weg.
mfg liggi1980
-
\r\n statt \0
-
das Problem besteht aber weiterhin.
mfg liggi1980
-
Kann ja gar nicht gehen!!!!!Hab vergessen die Anzahl der zu sendenen Zeichen um 4 zuerhöhen. Jetzt gehts.
mfg liggi1980
-
Warum um 4 erhöhen?

-
gilt \r\n nicht als 4 Zeichen?? Sind das nur 2 Zeichen???
mfg liggi1980
-
Eigentlich sinds nur zwei...
