Problem bei POP3-Login

cesupa

Erfahrenes Mitglied
Hi,

probiere gerade ein Login auf einem POP3-Server um meine Mails abzurufen, bis zum senden des usernamens funktionierts, wenn ich dann jedoch versuche das Passwort zu senden gibt mir der Server folgendes zurück: -ERR
Das wars, ich erhalte keinerlei erklärung, wenn ich mich aber mit telnet einlogge klappts ohne Probleme.
Ich verwende diesen code:

Code:
int pop3_login(SOCKET& c,char user[256],char password[256])
{
    stringstream ss;
    string s;
    char buf[1024],buf2[1024];
    
    ss<<"USER "<<user<<EOL; //String erstellen (EOL="\r\n")
    s=ss.str();
    senden(c,(char*)s.c_str(),255,0); //String an Server senden
    empf(c,buf,1024,0); //Antwort empfangen
    cout<<s.c_str()<<endl;
    cout<<buf; //Antwort ausgeben

    ss.str("");
    ss.clear();
    s="";
    ss<<"PASS "<<password<<EOL; //String für passwort erstellen
    s=ss.str();
 
    senden(c,(char*)s.c_str(),s.length(),0); //und senden
    
        empf(c,buf2,1024,0); //Antwort empfangen ("-ERR" ?)
        cout<<(char*)s.c_str()<<endl;
   
    cout<<buf2; //Antwortausgeben
}

Ich sehe auf den ersten Blick keinen Fehler, aber vielleicht seht ihr ja was.;)

Gruß
cesupa
 
naja, ist im grunde recht einfach, du "wartest" nicht auf eine antwort, du gehst einfach davon aus, das das nächste was der server dir sendet die antwort auf USER ist...bau dir am besten eine funktion "waitforServerResponse" oder so mit einer schleife darin und parse zunächst das was der server sendet, bevor du das nächste Kommando schickst...

gruß,

d00p
 
Hä?

Also hinter der Funktion empf() steht eigentlich nichts anderes als recv() und soweit ich weiß, wartet die Funktion recv() solange bis Daten gesendet werden und ich bekomme nachdem ich "User xxx" gesendet habe auch eine Antwort vom Server, nämlich das der Server jetzt das Passwort verlangt. Das Passwort schicke ich ihm und dann erhalte ich vom Server "-ERR".

Gruß
cesupa
 
ich kann dir nur sagen wie ich das immer mache (zwar nicht mit C++, aber so gehts eigentlich überall)...kann sein, dass da bei C++ andere regeln gelten...
 
So, ich werd jetzt mal meinen code posten:

Code:
int main(int argc, char *argv[])
{
    SOCKET c;
    char ip[32],buf[256],buf2[256];

    get_ip("pop3.web.de",ip);                                    //Ip bekommen
    client_init(c,ip,110,AF_INET,SOCK_STREAM,0); //Verbindung aufbauen
    empf(c,buf,255,0);                                             //Antwort erhalten
    cout<<buf;
    
    cout<<"USER cesupa"<<endl;
    send(c,"USER cesupa\r\n",255,0);                      //Anmeldung
    empf(c,buf,255,0);                                             //Antwort erhalten  
    cout<<buf;
    
    cout<<"PASS 123456789"<<endl;
    senden(c,"PASS 123456789\r\n",255,0);           //Passwort senden
    empf(c,buf2,255,0);                                         //Antwort erhalten         
    cout<<buf2;                                                    //Ausgabe : -ERR
      
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

Im Anhang ist ein Bild wie das ganze dann aussieht, hoffe ihr könnt mir weiterhelfen.

Gruß
cesupa
 

Anhänge

  • 24762attachment.jpg
    24762attachment.jpg
    18,3 KB · Aufrufe: 27
Zurück