SMTP Errorcodes abfangen?



  • Hi Forum,
    bei der komunikation mit einem SMTP Server gibts doch auch Antworten von dem Server zum Client, auch die die eventuelle Fehler darstellen sollen!
    Die Funktion WSAGetLastError() liefert mir den letzten Fehlerwert? Oder? 😕 , aber da gibt es viele Fehler die nicht mit der Funktion abgefangen werden, so was wie :
    Error 503 5.5.2 Send hello first!

    aber die ist in dem acBufferAntwort gespeichert, da fällt mir nur ein mit strstr() zu prüfen ob sich da in acBufferAntwort was mit diesem wert befindet, aber das ist mir zu unsicher, gibt's da was besseres oder bleibt nur die WSAGetLastError()... 😕

    mfg
    mirsad



  • Mirsad schrieb:

    Die Funktion WSAGetLastError() liefert mir den letzten Fehlerwert? Oder?

    Nein. WSAGetLastError liefert dir Fehlercodes auf der Windows Sockets-Ebene. Von SMTP oder anderen Protokollen in den darüberliegenden Schichten landet da gar nichts.

    aber die ist in dem acBufferAntwort gespeichert, da fällt mir nur ein mit strstr() zu prüfen ob sich da in acBufferAntwort was mit diesem wert befindet, aber das ist mir zu unsicher, gibt's da was besseres oder bleibt nur die WSAGetLastError()

    Daran ist nichts unsicher. Das Protokoll legt doch genau fest, wie der Server antworten darf.



  • Hallo MFK,
    also die Serverantwort auswerten und auf Fehlercodes durchsuchen, mit "unsicher" hab ich gemeint das da kein
    nummerischer Wert zurückgeliefert wird, also die Antwort als String nach Fehlercodes durchsuchen, oder? Z.B.
    wenn acAntwortBuffer die Antworten vom Server aufnimmt:

    if(strstr(acAntwortBuffer,"503 5.5.2")) // Error 503 5.5.2 Send hello first! 
     return ERR_VALUE; // oder irgend was anderes halt
    

    ich sollte auch sagen wie es jetzt ist:

    for(i = 0; i <= 9; i++)
    	{
    		strcpy(command, acSMTP[i]);
    		printf("%s\n", command);
    		send(sock, command, lstrlen(command), 0); // command senden
    		empfangen = recv(sock, acBuff, sizeof(acBuff), 0);
    		//printf("%s\n\n", acBuff);
    		acBuff[empfangen] = '\0'; // String terminieren 
    	}
    
          return WSAGetLastError(); // das ist die einzige Fehlerprüfung, 
                                    // die gibt mir (fast immer) den selben 
                                    // Fehlerwert bei fehlerhaftem Passwort und 
                                    // z.B Error 503 5.5.2 Send hello first
                                    // das wollte ich differenzieren   :rolleyes:
          closesocket(sock);
          WSACleanup();
    }
    

    das ist aus dem Forum, und funktioniert gut, jetzt geht es darum die Fehler abzufangen...
    lg
    mirsad


Anmelden zum Antworten