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.


Anmelden zum Antworten