Witam. Od kilkunastu godzin siedzę nad programem, który miałby wysłać na mój adres email wiadomość. Przy pomocy winsock2 stworzyłem socket, nawiązuję połączenie z serwerem SMTP i tu pojawiają się problemy.
Mój kod odpowiedzialny za komunikację z serwerem SMTP wygląda następująco:

send(sendmail.hSocket, "ehlo gmail.com\r\n", strlen("ehlo gmail.com\r\n"), 0);
    recv(sendmail.hSocket,rcv, 1024, 0);
    cout << rcv << endl;
    memset(&rcv, 0, 1024);
    
    send(sendmail.hSocket, "STARTTLS\r\n", strlen("STARTTLS\r\n"), 0);
    recv(sendmail.hSocket,rcv, 1024, 0);
    cout << rcv << endl;
    memset(&rcv, 0, 1024);
    
    send(sendmail.hSocket, "AUTH LOGIN\r\n", strlen("AUTH LOGIN\r\n"), 0);
    recv(sendmail.hSocket,rcv, 1024, 0);
    cout << rcv << endl;
    memset(&rcv, 0, 1024);
    
    send(sendmail.hSocket, (encoded_username+"\r\n").c_str(), encoded_username.length() + 2, 0);
    recv(sendmail.hSocket,rcv, 1024, 0);
    cout << rcv << endl;
    memset(&rcv, 0, 1024);
    
    send(sendmail.hSocket, (encoded_pass+"\r\n").c_str(), encoded_pass.length() + 2, 0);
    recv(sendmail.hSocket,rcv, 1024, 0);
    cout << rcv << endl;
    memset(&rcv, 0, 1024);
    
    send(sendmail.hSocket,"RCPT TO: <[email protected]>\r\n", strlen("RCPT TO: <[email protected]>\r\n"), 0);
    recv(sendmail.hSocket,rcv, 1024, 0);
    cout << rcv << endl;
    memset(&rcv, 0, 1024);

    send(sendmail.hSocket,"RCPT TO: <[email protected]>\r\n", strlen("RCPT TO: <[email protected]>\r\n"), 0);
    recv(sendmail.hSocket,rcv, 1024, 0);
    cout << rcv << endl;
    memset(&rcv, 0, 1024);
    
    send(sendmail.hSocket,"DATA\r\n", 6 , 0);
    recv(sendmail.hSocket,rcv, 1024, 0);
    cout << rcv << endl;
    memset(&rcv, 0, 1024);
    
    send(sendmail.hSocket,"tekst", 5 ,0);
	send(sendmail.hSocket,"\r\n.\r\n", 5 ,0);
    recv(sendmail.hSocket,rcv, 1024, 0);
    cout << rcv << endl;
    memset(&rcv, 0, 1024);
    
    send(sendmail.hSocket, "quit\r\n" , 6, 0);
    recv(sendmail.hSocket,rcv, 1024, 0);
    cout << rcv << endl;
    memset(&rcv, 0, 1024); 

W odpowiedzi dostaję tylko coś takiego:

WSAStartup success.
Username: Ym1hamt1dDkxQGdtYWlsLmNvbQ==
Pass: bWFqa3V0ZWs5MQ==
220 mx.google.com ESMTP b3sm41095760een.2
<|☺ü
250-mx.google.com at your service, [89.228.174.45]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES

220 2.0.0 Ready to start TLS









WSACleanup success.
Aby kontynuować, naciśnij dowolny klawisz . . .

Nie mam pojęcia dlaczego po komunikacje o TLS nie zostaje wysłana wiadomość. Być może jest tutaj jakiś problem z portami, ponieważ mój program korzysta z portu 587 a Thunderbird 993 i ma ustawione szyfrowanie SSL/TLS. Na stronie gmail jest jednak taki opis:
smtp.gmail.com (use authentication) (użyj uwierzytelniania)
Use Authentication: Yes (Użyj uwierzytelnienia: Tak)
Port for TLS/STARTTLS (Port dla połączeń TLS/STARTTLS): 587
Port for SSL (Port dla połączeń SSL): 465

czyli teoretycznie jest wszystko ok. Hasło i login wysyłam w postaci zaszyfrowanej Base64. Być może po wysłaniu polecenia "STARTTLS" powinienem wysłać jeszcze coś zanim wyślę hasło ? Czy ktoś już próbował rozwiązywać tego typu problem ? Przeglądnąłem już stertę stron internetowych w różnych językach i na żadnej z nich nie znalazłem działającego kodu, bądź po prostu darmowych źródeł. Pozdrawiam