pascalt Napisano Maj 12, 2008 Zgłoś Share Napisano Maj 12, 2008 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 More sharing options...
Toster Napisano Maj 13, 2008 Zgłoś Share Napisano Maj 13, 2008 sproboj dodac na koncu lini ktore wysylasz \n Powinno pomoc Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.