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