Kurze Frage zum Mailversand



  • Hallo ich habe mir ein Programm geschrieben um Emails zu versenden das ganze funktioniert auch ganz gut.

    Nur eine Frage habe ich noch:

    Wieso muss ich meinen Login Namen und mein Passwort verschlüsselt an den Server senden ?

    Beispiel:

    char name[]="ABCDEFGHI==\n"; <--- test@test.com
    char pw[]="1234XYZTM=\n"; <--- abcdefgh

    Wenn ich schreiben:

    char name[]="test@test.com\n";
    char pw[]="abcdefgh\n";

    Dann bekomme ich am ende diese Meldung vom Server ausgeben:

    antwort send_mail:
    503 MAIL FROM command must precede DATA
    meldung zu weit in der Vergangenheit . / Authentification failed, or POP3 logon
    too old.
    "☻¹⌂▲☻¹⌂
    ---------------------------------------
    QUIT
    
    antwort quit:
    500 Unrecognized command
    500 Unrecognized command
    500 Unrecognized command
    500 Unrecognized command
    500 Unrecognized command
    500 Unrecognized command
    500 Unrecognized command
    500 Unrecognized command
    
    ---------------------------------------
    Drücken Sie eine beliebige Taste . . .
    

    Was bedeutet diese Fehlermeldung was ist da falsch ?

    Wie die Email Adresse und das Passwort in verschlüsselter Form aussehen das konnte ich mit Wireshark feststellen wenn ich eine Email versendet habe.

    Mein Code zum Email versenden:

    #include <iostream>
    #include <windows>
    #include <fstream> 
    
    using namespace std; 
    
    int main(int argc, char* argv[]) 
    {
    
    long rc = 0;
    int nret = 0;
    int ret = 0;
    
    SOCKET kSock;
    
    WSAData wsdata;
    WORD wsver=MAKEWORD(2, 0);
    
    string req ;
    
    /*/
    req+= "GET /s2.php?data=";
    req.append ( var );
    req+= " HTTP/1.1\r\n";
    req+= "Host: testaccount435.te.funpic.de\r\n";
    req+= "Connection: close\r\n\r\n";
    /*/
    
    char ant[256];
    
    char helo[] ="EHLO test\n";  // RICHTERPC mit der funktion gethostbyname ermitteln
    char auth[]="AUTH LOGIN\n";
    
    char name[]="ABCDEFGHI==\n";
    char pw[]="1234XYZTM=\n";
    
    //char name[]="xxxxx@xxxx.de\n";
    //char pw[]="xxxxxxxxxx\n";
    
    char mail_from[]="MAIL FROM:<xxxxxx@xxxxxx.de>\n";
    char mail_to[]="RCPT TO:<xxxxxx@xxxxxx.de>\n";
    
    char data[]="DATA\n";
    
    string send_mail ="From: <xxxxxx@xxxxxx.de>\n";
           send_mail+="To: <xxxxxx@xxxxxx-pc.de>\n";
           send_mail+="Subject: hallo ich bin der betreff\n";
           send_mail+="Date: We, 9 Jun 2010 12:10:00\n";
    
           send_mail+="abc\n";
    
           send_mail+="\n";
    
           send_mail+="def\n";
           send_mail+=".\n";
    
    char quit[]="QUIT\n";
    
    nret = WSAStartup(wsver, &wsdata);
    kSock = socket(AF_INET, SOCK_STREAM, 0);
    
    sockaddr_in sin;
    sin.sin_port=htons(25);
    sin.sin_addr.s_addr=inet_addr("217.72.192.157");
    sin.sin_family=AF_INET;
    
    rc = connect(kSock,(sockaddr*)&sin, sizeof(sin));
    
    // helo
          ret= send(kSock, helo ,strlen(helo ),0);
          cout<< helo <<endl;
          rc  = recv(kSock, ant, sizeof(ant), 0);
          cout<<"antwort helo: " <<endl;
          cout<< ant << endl;
          cout<<"---------------------------------------"<<endl;
    
    // auth
          ret= send(kSock, auth ,strlen(auth ),0);
          cout<< auth <<endl;
          rc  = recv(kSock, ant, sizeof(ant), 0);
          cout<<"antwort AUTH: " <<endl;
          cout<< ant << endl;
          cout<<"---------------------------------------"<<endl;
    
    // name
          ret= send(kSock, name ,strlen(name ),0);
          cout<< name <<endl;
          rc  = recv(kSock, ant, sizeof(ant), 0);
          cout<<"antwort name: " <<endl;
          cout<< ant << endl;
          cout<<"---------------------------------------"<<endl;
    
    // pw
          ret= send(kSock, pw ,strlen(pw ),0);
          cout<< pw <<endl;
          rc  = recv(kSock, ant, sizeof(ant), 0);
          cout<<"antwort pw: " <<endl;
          cout<< ant << endl;
          cout<<"---------------------------------------"<<endl;
    
    // mail from
          ret= send(kSock, mail_from ,strlen(mail_from ),0);
          cout<< mail_from <<endl;
          rc  = recv(kSock, ant, sizeof(ant), 0);
          cout<<"antwort mail from: " <<endl;
          cout<< ant << endl;
          cout<<"---------------------------------------"<<endl;
    
    //mail_to
    
          ret= send(kSock, mail_to ,strlen(mail_to ),0);
          cout<< mail_to <<endl;
          rc  = recv(kSock, ant, sizeof(ant), 0);
          cout<<"antwort mail to: " <<endl;
          cout<< ant << endl;
          cout<<"---------------------------------------"<<endl;
    
    //data
    
          ret= send(kSock, data ,strlen(data ),0);
          cout<< data <<endl;
          rc  = recv(kSock, ant, sizeof(ant), 0);
          cout<<"antwort data: " <<endl;
          cout<< ant << endl;
          cout<<"---------------------------------------"<<endl;
    
    //send_mail
          ret= send(kSock, send_mail.c_str() ,strlen(send_mail.c_str() ),0);
          cout<< send_mail.c_str() <<endl;
          rc  = recv(kSock, ant, sizeof(ant), 0);
          cout<<"antwort send_mail: " <<endl;
          cout<< ant << endl;
          cout<<"---------------------------------------"<<endl;
    
    //quit
    
          ret= send(kSock, quit ,strlen(quit ),0);
          cout<< quit <<endl;
          rc  = recv(kSock, ant, sizeof(ant), 0);
          cout<<"antwort quit: " <<endl;
          cout<< ant << endl;
          cout<<"---------------------------------------"<<endl;
    
    WSACleanup();
    closesocket(kSock);
    system("PAUSE");
    return 0;
    }
    


  • Ah ok habs schon gefunden.

    z.b.

    string var = "test@test.com";

    Codiere var in Base64: ABCDEFGHI==

    Weiss wer ob es eine Funktion gibt mit der ich Normalen Text in Base64 umwandeln kann ?



  • Hi

    Base64 ist eine Codierung und noch lange keine Verschlüsselung. Du kannst nicht einfach so daten verschlüsseln und an den server senden. Nur das was der mailserver unterstützt. Würde dir mal empfehlen open ssl oder so zu studieren. wen es den wirklich einigermassen sicher sein soll.

    Lowbyte



  • Ein paar Anmerkungen:
    Du solltest die Rückmeldungen des SMTP-Servers auswerten!

    Du beachtest den Rückgabewert von recv() nicht!
    TCP ist ein Stream, recv() empfängt keine Pakete und eher nur zufälligerweise vollständige Server-Antworten - ggf. musst du recv() mehrfach aufrufen! (such hier im forum mal nach recv(), da gibt es etliche Themen zu...)

    base64 ist eigentlich ein recht simples Ding, google sollte da sowohl etliche Beschreibungen als auch Quellcode ausspucken können.
    Ob WinAPI da was fertiges hat weiss ich nicht (Im .NET-Framework wäre was drin)



  • Hallo,

    Ob WinAPI da was fertiges hat

    Ab XP gibt es CryptBinaryToString und CryptStringToBinary

    MfG,

    Probe-Nutzer


Anmelden zum Antworten