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); 
    
    }
    

Anmelden zum Antworten