nilosgr Δημοσ. 11 Ιουλίου 2011 Δημοσ. 11 Ιουλίου 2011 Γεια σας γραφω ενα προγραμματακι για να στελνει email με SMTP χρησημοποιώντας sockets (δεν ξερω αν γινεται κι αλλιως ) Ενω η συνδεση με το server γινεται κανονικα, κατα το authenticate περνω το εξης error: "5.7.0 Must issue a STARTTLS command first" Αυτό γινεται οταν βαζω τα στοιχεια απο το hotmail ή το gmail ή το yahoomail, εάν βαζω απο το otenet mail δουλευει κανονικα. (προφανως επειδη το otenet mail δεν εχει ενεργοποιημενο SSL / TLS) Μπορει καποιος να με βοηθησει να το κανω να δουλευει και με servers που εχουν ενεργοποιημενο SSL / TLS; Οι ρυθμησεις για hotmail, gmail, yahoomail, otenet mail. Ο κώδικας: > #include <stdio.h> #include <tchar.h> #include <winsock2.h> #include <ws2tcpip.h> #include <windows.h> #define HOST "smtp.live.com" #define USER "[email protected]" #define PASSWORD "pass" #define FROM "[email protected]" #define TO "[email protected]" #define SUBJECT "junkies" #define MESSAGE "take the body" int _tmain(int argc, _TCHAR* argv[]) { int iResult; WSADATA wsaData; int iProtocolPort; char pchMessage[4096]=""; SOCKET hServer = INVALID_SOCKET; LPHOSTENT lpHostEntry; LPSERVENT lpServEntry; SOCKADDR_IN SockAddr; iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (iResult) { printf("WSAStartup failed: %d\n", iResult); system("pause"); return 1; } if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) { _tprintf(TEXT("Could not find a usable version of Winsock.dll\n")); WSACleanup(); system("pause"); return 2; } else printf("The Winsock 2.2 dll was found okay\n"); lpHostEntry=gethostbyname(HOST); if(!lpHostEntry) { _tprintf(TEXT("gethostbyname failed: %d\n"), WSAGetLastError()); WSACleanup(); system("pause"); return 3; } hServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (hServer == INVALID_SOCKET) { _tprintf(TEXT("socket failed: %d\n"), WSAGetLastError()); WSACleanup(); system("pause"); return 4; } lpServEntry=getservbyname("mail", NULL); if(!lpServEntry) { _tprintf(TEXT("getservbyname failed: %d\n"), WSAGetLastError()); iProtocolPort = htons(IPPORT_SMTP); } else { iProtocolPort = lpServEntry->s_port; } SockAddr.sin_family = AF_INET; SockAddr.sin_port = iProtocolPort; SockAddr.sin_addr = *((LPIN_ADDR) *lpHostEntry->h_addr_list); if (connect(hServer, (PSOCKADDR) &SockAddr, sizeof(SockAddr)) == SOCKET_ERROR) { _tprintf(TEXT("connect failed: %d\n"), WSAGetLastError()); WSACleanup(); closesocket(hServer); system("pause"); return 5; } iResult = recv(hServer, pchMessage, sizeof(pchMessage), 0); printf("connect %s \n", pchMessage); ZeroMemory(pchMessage, sizeof(pchMessage)); sprintf(pchMessage, "ehlo\r\n"); send(hServer, pchMessage, strlen(pchMessage), 0); iResult = recv(hServer, pchMessage, sizeof(pchMessage), 0); printf("ehlo %s %d \n", pchMessage, iResult); ZeroMemory(pchMessage, sizeof(pchMessage)); sprintf(pchMessage, "auth login\r\n"); send(hServer, pchMessage, strlen(pchMessage), 0); iResult = recv(hServer, pchMessage, sizeof(pchMessage), 0); printf("auth %s %d (%d)\n", pchMessage, iResult, 334); ZeroMemory(pchMessage, sizeof(pchMessage)); sprintf(pchMessage, "%s\r\n", USER); send(hServer, pchMessage, strlen(pchMessage), 0); iResult = recv(hServer, pchMessage, sizeof(pchMessage), 0); printf("user %s %d (%d)\n", pchMessage, iResult, 334); ZeroMemory(pchMessage, sizeof(pchMessage)); sprintf(pchMessage, "%s\r\n", PASSWORD); send(hServer, pchMessage, strlen(pchMessage), 0); iResult = recv(hServer, pchMessage, sizeof(pchMessage), 0); printf("pass %s %d (%d)\n", pchMessage, iResult, 235); ZeroMemory(pchMessage, sizeof(pchMessage)); sprintf(pchMessage, "mail from:<%s>\r\n", FROM); send(hServer, pchMessage, strlen(pchMessage), 0); iResult = recv(hServer, pchMessage, sizeof(pchMessage), 0); printf("from %s %d (%d)\n", pchMessage, iResult, 250); ZeroMemory(pchMessage, sizeof(pchMessage)); sprintf(pchMessage, "rcpt to:<%s>\r\n", TO); send(hServer, pchMessage, strlen(pchMessage), 0); iResult = recv(hServer, pchMessage, sizeof(pchMessage), 0); printf("to %s %d (%d)\n", pchMessage, iResult, 250); ZeroMemory(pchMessage, sizeof(pchMessage)); sprintf(pchMessage, "DATA\r\n"); send(hServer, pchMessage, strlen(pchMessage), 0); iResult = recv(hServer, pchMessage, sizeof(pchMessage), 0); printf("data %s %d (%d)\n", pchMessage, iResult, 250); ZeroMemory(pchMessage, sizeof(pchMessage)); sprintf(pchMessage, "Subject: %s\r\n\r\n%s\r\n.\r\n", SUBJECT, MESSAGE); send(hServer, pchMessage, strlen(pchMessage), 0); iResult = recv(hServer, pchMessage, sizeof(pchMessage), 0); printf("subj/mesg %s %d (%d)\n", pchMessage, iResult, 250); ZeroMemory(pchMessage, sizeof(pchMessage)); sprintf(pchMessage, "quit\r\n"); send(hServer, pchMessage, strlen(pchMessage), 0); iResult = recv(hServer, pchMessage, sizeof(pchMessage),0); printf("quit %s %d (%d)\n", pchMessage, iResult, 250); closesocket(hServer); WSACleanup(); system("pause"); return 0; }
παπι Δημοσ. 11 Ιουλίου 2011 Δημοσ. 11 Ιουλίου 2011 Ψαξε msdn μπας και εχει τιποτα για SSL ή πας http://www.openssl.org/ ή δες να το κανεις μεσου http http://msdn.microsof...3(v=vs.85).aspx που εχει SSL Ιδεα δεν εχω για το πως δουλευει το ssl, αλλα για να υπαρχει βιβλιοθηκη δεν θα ειναι και κατι απλο
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.