Skocz do zawartości

[C++] Protokol SMTP - e-mail sending (HELO)


pascalt

Polecane posty

Witam,

jak najwiecej o problemie staralem sie powiedziec juz w samym tytule postu. Na poczatku powiem, ze uzywam kompilatora BCB 6. Aplikacja ma byc konsolowa bez zadnych udziwnien.

 

Pisze program, ktorego zadaniem bedzie wyslanie wiadomosci (na razie tylko tekstowej) na podanego (na razie wpisanego na sztywno w kodzie) maila.

Uzywam biblioteki Winsock. Polaczenie udaje sie nawiazac z serwerem. Jednak po wyslaniu "helo" (specyfikacja SMTP: http://tools.ietf.org/html/rfc2821) nie otrzymuje zadnej odpowiedzi ze strony serwera... Funkcja recv() oczekuje caly czas na reakcje i na nia sie nie moze doczekac. W koncu nastepuje przekroczenie limitu czasu...

 

I tutaj zwracam sie z pytaniem - gdzie jest luka w moim rozumowaniu? A moze inaczej co oznacza ten brak odpowiedzi ze strony serwera? Dodam, ze probowalem juz z kilkoma roznymi serwerami SMTP i w zasadzie wszedzie ten sam problem.

 

Dla osiagniecia wiekszej jednoznacznosci mojej wypowiedzi - ponizej dolaczam kod programu - byc moze sie tez komus przyda:

 

KOD

#include <stdlib.h>

#include <winsock.h>

#include <stdio.h>

#include <windows.h>

#include <wininet.h>

#include <iostream>

#include <conio.h>

 

using namespace std;

 

typedef DWORD(WINAPI *REGSERVPROC)(DWORD, DWORD);

 

int Welcome()

{

system("cls");

}

 

void service() // Make Program a Service

{

HINSTANCE hLibrary;

REGSERVPROC regproc;

hLibrary = LoadLibrary("kernel32.dll");

regproc = (REGSERVPROC) GetProcAddress(hLibrary, "RegisterServiceProcess");

if((int)GetVersion() < 0)

regproc(NULL,1);

}

 

int main()

{

char FromEmail[100];

char ToEmail[100 ];

char Body[100];

Hotmail:

system("cls");

strcpy(ToEmail,"pascalt_85@wp.pl");

strcpy(FromEmail,"pascalt_85@wp.pl");

strcpy(Body,"info");

#define host "smtp.wp.pl"

cout<<"Target Email: '"<<ToEmail<<"'\n"<<endl;

cout<<"Fake Email: '"<<FromEmail<<"'\n"<<endl;

cout<<"Message: '"<<Body<<"'\n"<<endl;

system("Pause");

service();

getch();

//---------------------------------------------------

WORD sockV;

WSAData wsaData;

int nret;

 

sockV = MAKEWORD(2, 2);

WSAStartup(sockV, &wsaData);

LPHOSTENT hostEntry;

hostEntry = gethostbyname(host);

printf("%s",hostEntry->h_name);

if (!hostEntry)

{

MessageBox(0, "Error, cannot find host", "Fatal error", MB_OK);

WSACleanup();

return 0;

}

SOCKET CData;

CData = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if(CData == INVALID_SOCKET)

{

MessageBox(0, "Could not start socket", "Fatal error", MB_OK);

WSACleanup();

return 0;

}

 

SOCKADDR_IN ServerInfo;

ServerInfo.sin_family = AF_INET;

ServerInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);

ServerInfo.sin_port = htons(25);

nret = connect(CData, (LPSOCKADDR)&ServerInfo, sizeof(struct sockaddr));

while(nret == SOCKET_ERROR)

{

nret = connect(CData, (LPSOCKADDR)&ServerInfo, sizeof(struct sockaddr));

}

//--------------------

char test[255];

char test1[255];

char email[255]="Mail From: <<ToEmail<<";

char emailto[255]="RCPT TO: <<FromEmail<<";

recv(CData,test,555,0);

send(CData,"helo",strlen("helo"),0);

recv(CData,test1,555,0);

send(CData,email, sizeof(email),0);

recv(CData,test,555,0);;

send(CData,emailto, strlen(emailto),0);

recv(CData,test,555,0);

send(CData,"data", strlen("data"),0);

recv(CData,test,555,0);

send(CData,Body,sizeof(Body),0);

send(CData,".",strlen("."),0);

recv(CData,test,555,0);

send(CData,"quit",strlen("quit"),0);

recv(CData,test,555,0);

//return true;

MessageBox (NULL, "Done", "info", MB_ICONEXCLAMATION + MB_SYSTEMMODAL);

}

 

 

Pozdrawiam.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...