Leere Email
-
Hi,
ich möchte mit diesem SMTP Client einen Text aus einer .txt Datei per Email verschicken. Die Email kommt zwar an aber ist Leer. Weiß villeicht Jemand warum?
{[b] ifstream fin("config.txt");[/b] long rc; SOCKET s; SOCKADDR_IN addr; char buf[256]; char buf2[256]; rc = startWinsock(); if(rc!=0) { printf("Es ist ein Fehler beim Initialsieren der Windowsocket aufgetreten\n"); } else { printf("Winsocket started!\n"); } //Socket erstellen s = socket(AF_INET, SOCK_STREAM, 0); if(s == INVALID_SOCKET) { printf("Error: Could not create socket, error: ");WSAGetLastError(); } else { printf("Socket creating successfull!\n"); // Alles auf 0 setzen, inklsuive sin_zero memset(&addr, 0, sizeof(SOCKADDR_IN)); addr.sin_family = AF_INET; addr.sin_port = htons(587); // Legt Portnummer fest, htons wandelt Short in Network byte um addr.sin_addr.s_addr = inet_addr("213.165.64.20"); //209.85.135.111 GMAIL 213.165.64.20 GMX 217.72.192.157 WEB //Socketverbindung aufbauen rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR)); if( rc == SOCKET_ERROR) { printf ("Connection to socket failed.");WSAGetLastError(); } else { printf("Verbunden mit SMTP GmxMail - Port 25... \n"); } // Daten austauschen int ok = 1; while(rc!=SOCKET_ERROR) { char helo[256] = "EHLO localhost\r\n"; send(s, helo,strlen(helo),0); rc=recv(s,buf,256,0); buf[rc]='\0'; printf("\nServer antwortet(ehlo): %s\n",buf); char auth[256] = "AUTH LOGIN\r\n"; send(s, auth,strlen(auth),0); rc=recv(s,buf,256,0); buf[rc]='\0'; printf("\nServer antwortet(auth): %s\n",buf); char user[256] = "LoginName in base64\r\n"; send(s, user,strlen(user),0); rc=recv(s,buf,256,0); buf[rc]='\0'; printf("\nServer antwortet(user): %s\n",buf); char pass[256] = "Passwort in base64\r\n"; send(s, pass,strlen(pass),0); rc=recv(s,buf,256,0); buf[rc]='\0'; printf("\nServer antwortet(pass): %s\n",buf); char rfrom[256] = "MAIL FROM: test@gmx.net\r\n"; send(s, rfrom, strlen(rfrom),0); rc=recv(s,buf,256,0); buf[rc]='\0'; printf("\nServer antwortet(rfrom): %s\n",buf); char rto[256] = "RCPT TO: test@web.de\r\n"; send(s, rto, strlen(rto), 0); rc=recv(s,buf,256,0); buf[rc]='\0'; printf("\nServer antwortet(rto): %s\n",buf); char data[256] = "DATA\r\n"; send(s, data, strlen(data), 0); rc=recv(s,buf,256,0); buf[rc]='\0'; printf("\nServer antwortet(data): %s\n",buf); char from[256] = "From: smtp.test@directbox.com\r\n"; send(s, from, strlen(from), 0); rc=recv(s,buf,256,0); buf[rc]='\0'; printf("\nServer antwortet(data): %s\n",buf); char to[256] = "To: Chrises\r\n"; send(s, to, strlen(to), 0); char sub[256] = "Subject: Hallo\r\n"; send(s, sub, strlen(sub), 0); char frei[256] = "\r\n"; send(s, frei, strlen(frei), 0); [b] char text[256]; fin.getline(text, 256); send(s, text, strlen(text), 0);[/b] char punkt[256] = ".\r\n"; send(s, punkt, strlen(punkt), 0); rc=recv(s,buf,256,0); buf[rc]='\0'; printf("\nServer antwortet(punkt): %s\n",buf); system("Pause"); buf[rc]='\0'; printf("\nServer antwortet: %s\n",buf); } closesocket(s); WSACleanup(); }}
-
deine verwendung von printf ist SEHR sonderbar -> falsch.
printf("Error: %d", WSAGetLastError());außerdem überprüfst du die rückgabe nur einmal pro schleife. was das erste
recv zurückgibt, wird komplett ignoriert. sehr unsauber.