pop3 Email Client.



  • Hi,

    ich versuche seit Stunden ein Programm zu schreiben, das via Sockets auf einen POP3 Server zugreifen soll ...

    Aber irgendwie geht es nicht.
    Hat irgendjemand schonmal sowas gemacht und kann mir die Sourcen schicken?

    Ich poste mal das was ich bisher habe....

    #include <iostream>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <string.h>
    using namespace std;
    
    #define SERVER_PORT 110
    
    int main(int argc, char **argv) {
      if(argc < 4) {
        cout << "Usage: " << argv[0] << " server username password" << "\n";
        cout << "server   = Your POP3 mail server" << "\n";
        cout << "username = Your POP3 account user name" << "\n";
        cout << "username = Your POP3 account password" << "\n";
        cout << "\n";
        cout << "Example: " << argv[0] 
    	 << " popserver.xyz.com myname mypassword" << "\n";
        return 1;
      }
      char *host = argv[1];
      char *username = argv[2];
      char *password = argv[3];
      char buf[256]; 
      char *token;
      string res;
      int len;
      int s;
      struct sockaddr_in sin;
    
      cout << "Connecting to the POP3 server" << "\n"; 
    
      struct hostent *hp = gethostbyname(host);
      if (!hp) {
        fprintf(stderr, "unknown Host: %s\n", host);
        exit(1);
      }
    
      bzero((char *)&sin, sizeof(sin));
      sin.sin_family = AF_INET;
      bcopy(hp->h_addr, (char *)&sin.sin_addr, hp->h_length);
      sin.sin_port = htons(SERVER_PORT);
    
      s = socket(PF_INET, SOCK_STREAM, 0);
      connect(s, (struct sockaddr *)&sin, sizeof(sin));
    
      len = recv(s, buf, sizeof(buf), 0);
      token = strtok(buf, " ");
      if(token != NULL) { res = token; }
      if (res == "+ERR") { cout << "No Connection to " << host << endl; exit(1); }
      if (res == "+OK") { cout << "Connection to " << host << " successful" << endl; }
    
      string user = "user " + (string)username + "\0";
      len = strlen(user.c_str());
      send(s, user.c_str(), len, 0);
    
      string pass = "pass " + (string)password + "\0";
      len = strlen(pass.c_str());
      send(s, pass.c_str(), len, 0);
    
      string list = "list\0";
      len = strlen(list.c_str());
      send(s, list.c_str(), len, 0);
      len = recv(s, buf, sizeof(buf), 0);
    
      cout << buf << endl;
    
      close(s);
    }
    

    Leider sind die Nachrichten, die ich vom Server bekomme, nicht das, was eigentlich kommen sollte 😕

    Irgendwie bekomme ich auch immer komische Sequenzen wie @85B35 usw. nach dem eigentlichen Server-Text wie +OK...



  • Dieser Thread wurde von Moderator/in flenders aus dem Forum Webzeugs in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • mach doch mal buffernullterminierung

    int bytes = recv(...);
    buffer[bytes] = '\0';
    

    hilft das weiter?



  • Du musst nach dem "USER xxx"-Command die Status-Antwort empfangen.

    Ergo: Nach jedem Send ein Receive, um auf "+OK" oder "-ERR" zu checken.


Anmelden zum Antworten