mes mariusz Napisano Luty 15, 2013 Zgłoś Share Napisano Luty 15, 2013 Prośba o wsparcie dla początkującego... Załączam kod i log kompilatora. Prośba o komentarz do log-a i wskazanie jak to poprawić. Kod: <code=cpp> #include <windows.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") // Insist on at least Winsock v1.1 const VERSION_MAJOR = 1; const VERSION_MINOR = 1; #define CRLF "\r\n" // carriage-return/line feed pair void ShowUsage(void) { cout << "Usage: SENDMAIL mailserv to_addr from_addr messagefile" << endl << "Example: SENDMAIL smtp.myisp.com rcvr@elsewhere.com my_id@mydomain.com message.txt" << endl; exit(1); } // Basic error checking for send() and recv() functions void Check(int iStatus, char *szFunction) { if((iStatus != SOCKET_ERROR) && (iStatus)) return; cerr << "Error during call to " << szFunction << ": " << iStatus << " - " << GetLastError() << endl; } int main(int argc, char *argv[]) { int iProtocolPort = 0; char szSmtpServerName[64] = ""; char szToAddr[64] = ""; char szFromAddr[64] = ""; char szBuffer[4096] = ""; char szLine[255] = ""; char szMsgLine[255] = ""; SOCKET hServer; WSADATA WSData; LPHOSTENT lpHostEntry; LPSERVENT lpServEntry; SOCKADDR_IN SockAddr; // Check for four command-line args if(argc != 5) ShowUsage(); // Load command-line args lstrcpy(szSmtpServerName, argv[1]); lstrcpy(szToAddr, argv[2]); lstrcpy(szFromAddr, argv[3]); // Create input stream for reading email message file ifstream MsgFile(argv[4]); // Attempt to intialize WinSock (1.1 or later) if(WSAStartup(MAKEWORD(VERSION_MAJOR, VERSION_MINOR), &WSData)) { cout << "Cannot find Winsock v" << VERSION_MAJOR << "." << VERSION_MINOR << " or later!" << endl; return 1; } // Lookup email server's IP address. lpHostEntry = gethostbyname(szSmtpServerName); if(!lpHostEntry) { cout << "Cannot find SMTP mail server " << szSmtpServerName << endl; return 1; } // Create a TCP/IP socket, no specific protocol hServer = socket(PF_INET, SOCK_STREAM, 0); if(hServer == INVALID_SOCKET) { cout << "Cannot open mail server socket" << endl; return 1; } // Get the mail service port lpServEntry = getservbyname("mail", 0); // Use the SMTP default port if no other port is specified if(!lpServEntry) iProtocolPort = htons(IPPORT_SMTP); else iProtocolPort = lpServEntry->s_port; // Setup a Socket Address structure SockAddr.sin_family = AF_INET; SockAddr.sin_port = iProtocolPort; SockAddr.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list); // Connect the Socket if(connect(hServer, (PSOCKADDR) &SockAddr, sizeof(SockAddr))) { cout << "Error connecting to Server socket" << endl; return 1; } // Receive initial response from SMTP server Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() Reply"); // Send HELO server.com sprintf(szMsgLine, "HELO %s%s", szSmtpServerName, CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() HELO"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() HELO"); // Send MAIL FROM: <sender@mydomain.com> sprintf(szMsgLine, "MAIL FROM:<%s>%s", szFromAddr, CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() MAIL FROM"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() MAIL FROM"); // Send RCPT TO: <receiver@domain.com> sprintf(szMsgLine, "RCPT TO:<%s>%s", szToAddr, CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() RCPT TO"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() RCPT TO"); // Send DATA sprintf(szMsgLine, "DATA%s", CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() DATA"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() DATA"); // Send all lines of message body (using supplied text file) MsgFile.getline(szLine, sizeof(szLine)); // Get first line do // for each line of message text... { sprintf(szMsgLine, "%s%s", szLine, CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() message-line"); MsgFile.getline(szLine, sizeof(szLine)); // get next line. } while(MsgFile.good()); // Send blank line and a period sprintf(szMsgLine, "%s.%s", CRLF, CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() end-message"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() end-message"); // Send QUIT sprintf(szMsgLine, "QUIT%s", CRLF); Check(send(hServer, szMsgLine, strlen(szMsgLine), 0), "send() QUIT"); Check(recv(hServer, szBuffer, sizeof(szBuffer), 0), "recv() QUIT"); // Report message has been sent cout << "Sent " << argv[4] << " as email message to " << szToAddr << endl; // Close server socket and prepare to exit. closesocket(hServer); WSACleanup(); return 0; }</code> Kompilator: Default compiler Building Makefile: "D:\_MC\Prg\cpp\mail\Makefile.win" Wykonywanie make... make.exe -f "D:\_MC\Prg\cpp\mail\Makefile.win" all g++.exe -c main.cpp -o main.o -I"D:/_MC/Prg/cpp/Dev-CppPortable/App/devcpp/lib/gcc/mingw32/3.4.2/include" -I"D:/_MC/Prg/cpp/Dev-CppPortable/App/devcpp/include/c++/3.4.2/backward" -I"D:/_MC/Prg/cpp/Dev-CppPortable/App/devcpp/include/c++/3.4.2/mingw32" -I"D:/_MC/Prg/cpp/Dev-CppPortable/App/devcpp/include/c++/3.4.2" -I"D:/_MC/Prg/cpp/Dev-CppPortable/App/devcpp/include" main.cpp:7: error: ISO C++ forbids declaration of `VERSION_MAJOR' with no type main.cpp:8: error: ISO C++ forbids declaration of `VERSION_MINOR' with no type main.cpp: In function `void ShowUsage()': main.cpp:14: error: `cout' undeclared (first use this function) main.cpp:14: error: (Each undeclared identifier is reported only once for each function it appears in.) main.cpp:15: error: `endl' undeclared (first use this function) main.cpp: In function `void Check(int, char*)': main.cpp:26: error: `cerr' undeclared (first use this function) main.cpp:26: error: `endl' undeclared (first use this function) main.cpp: In function `int main(int, char**)': main.cpp:54: error: `ifstream' undeclared (first use this function) main.cpp:54: error: expected `;' before "MsgFile" main.cpp:59: error: `cout' undeclared (first use this function) main.cpp:59: error: `endl' undeclared (first use this function) main.cpp:108: error: `sprintf' undeclared (first use this function) main.cpp:128: error: `MsgFile' undeclared (first use this function) make.exe: *** [main.o] Error 1 Wykonanie zakończone Link do komentarza Udostępnij na innych stronach More sharing options...
MacMercury Napisano Luty 15, 2013 Zgłoś Share Napisano Luty 15, 2013 7. i 8. linijka: const int VERSION_MAJOR = 1; const int VERSION_MINOR = 1; Nastepnie dodaj to: #include <iostream> #include <ifstream> #include <cstdio> using namespace std; na samej górze kodu. 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.