Witam

Męczę się od kilku dni z SMTP niestety bezskutecznie. Oto mój problem:
Napisałem w C++ aplikacje kliencką do łączenia z smtp:

#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>

#pragma comment(lib, "ws2_32.lib")

#define DEFAULT_PORT        587 //56036
#define DEFAULT_BUFFER      555

using namespace std;

int main()
{


    WSADATA       wsd;
    SOCKET        sClient;
    sockaddr_in ServerInfo;
    hostent    *host = NULL;
	char	server_name[] = "poczta.o2.pl";                     
	int		iPort     = DEFAULT_PORT;

    // Load winsock
    if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
    {
		cout << "Nie mozna stworzyc WinSock'a." << endl;
        return 1;
    }

    sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sClient == INVALID_SOCKET)
    {
		cout << "Nie mozna utworzyc gniazda (" << WSAGetLastError() << ")." << endl;
      system("pause");  return 1;
    }

    ServerInfo.sin_family = AF_INET;
    ServerInfo.sin_port = htons((u_short)iPort);
	ServerInfo.sin_addr.s_addr = inet_addr(server_name);

    if (ServerInfo.sin_addr.s_addr == INADDR_NONE)
    {
        host = gethostbyname(server_name);
        if (host == NULL)
        {
			cout << "Nie mozna przeksztalcic na ip: " << server_name << endl;
          system("pause");  return 1;
        }
        CopyMemory(&ServerInfo.sin_addr, host->h_addr_list[0], host->h_length);
    }

    int blad_polaczenia = connect(sClient, (sockaddr *)&ServerInfo, sizeof(ServerInfo));
    while(blad_polaczenia == SOCKET_ERROR){
			cout << "Nie mozna sie polaczyc (" << WSAGetLastError() << "). Probuje na nowo..." << endl;
			blad_polaczenia = connect(sClient, (sockaddr *)&ServerInfo, sizeof(ServerInfo));
			 system("pause");
    }

	cout << "Polaczono." << endl;

	char buffer[DEFAULT_BUFFER];
	//recv(sClient,buffer,3,0);
	//cout<<buffer<<endl;

	send(sClient,"EHLO poczta.o2.pl\r\n",sizeof("EHLO poczta.o2.pl\r\n"),0);
	recv(sClient, buffer, 555, 0);
	cout<<buffer<<endl;
//	recv(sClient, buffer, 555, 0);
//	cout<<buffer<<endl;

	
	send(sClient, "AUTH LOGIN\r\n", strlen("AUTH LOGIN\r\n"), 0);
	recv(sClient, buffer, 555, 0);
	cout<<buffer<<endl;

	closesocket(sClient);
	WSACleanup();
	system("pause");
	return 0;
}

Program się kompiluje i komenda ehlo poczta.o2.pl jest wprowadzana prawidłowo i serwer odpowiada. Jednak każda inna komenda w celu zalogowania (po auth login oczywiscie chciałem podawać login i hasło w base64) jednak od razu zwraca Sorry i dalej iść nie idzie.
Zmieniłem serwer smtp na smtp.wp.pl i miałem to samo... ehlo ladnie dziala, jednak kazda inna komenda niestety nie.

Dziękuję z góry za odpowiedź, wzorowałem się na przykłądzie w tym temacie
http://4programmers.net/Forum/457838?h=smtp#id457838
i naprawde już nie wiem gdzie jest błąd... wydaje mi się że aplikacja jest napisana prawidłowo tylko możliwe ze składnia polecenia jest zła w funkcji send(...).
program pisany w Visual Studio