Mail versenden über Sockets mit smtp



  • Hi an alle,

    ich versuche mich gerade daran Mails via Sockets und SMTP zu versenden.
    Ich melde mich vorher am POP3 Server an, da deer Provider SMTP after Pop verlangt.
    Danach versuche ich die Mail per smtp zu versenden.
    Bei Senden von MAIL FROM: mail@domain.tld bekomme ich auch noch ein OK.
    Nun gebe ich bei RCPT TO: mail@domain.tld meinen Account bei web.de an und bekomme dort den Fehler: 554 Relay Access denied.

    Laut RFC sollte es aber genauso funktionieren.

    Hier mal der Code:

    st_SockkAddr.sin_family = AF_INET;
    		st_SockkAddr.sin_port = htons(POP3_PORT);
    
    		st_SockkAddr.sin_addr.s_addr = inet_addr(szHostname);
    
    		success = connect(nSockId, (struct sockaddr*)&st_SockkAddr, sizeof(st_SockkAddr)); 
    		if(success < 0)
    		{
    			int err = WSAGetLastError();
    		}
    		r_len = recv(nSockId, recvBuf, MAX_LENGTH, 0);
    		recvBuf[r_len] = '\0';
    
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    		//Get Mails
    
    		//Logon User
    		strcpy(sendBuf, "USER name\r\n");
    		s_len = send(nSockId, sendBuf, strlen(sendBuf), 0);
    
    		r_len = recv(nSockId, recvBuf, MAX_LENGTH, 0);
    		recvBuf[r_len] = '\0';
    
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    
    		//LOGON Pass 
    		strcpy(sendBuf, "PASS password\r\n");
    		s_len = send(nSockId, sendBuf, strlen(sendBuf), 0);
    		r_len = recv(nSockId, recvBuf, MAX_LENGTH, 0);
    		recvBuf[r_len] = '\0';
    
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", 0);
    
    		closesocket(nSockId);
    		nSockIdSMTP = socket(AF_INET, SOCK_STREAM, 0);
    
    		strcpy(sendBuf, "LIST\n");
    		s_len = send(nSockId, sendBuf, strlen(sendBuf), 0);
    		r_len = recv(nSockId, recvBuf, MAX_LENGTH, 0);
    
    		recvBuf[r_len] = '\0';
    
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    
    		//Send QUIT
    		strcpy(sendBuf,"QUIT\n");
    
    		s_len = send(nSockId,sendBuf,strlen(sendBuf),0);
    
    		r_len = recv(nSockId,recvBuf,MAX_LENGTH,0);
    		recvBuf[r_len] = '\0';
    
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    
    		//Connect to smtp
    		st_SockkAddr.sin_family = AF_INET;
    		st_SockkAddr.sin_port = htons(SMTP_PORT);
    
    		st_SockkAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    		success = connect(nSockId, (struct sockaddr*)&st_SockkAddr, sizeof(st_SockkAddr)); //Verbinden zu SMTP
    		if(success < 0)
    		{
    			int err = WSAGetLastError();
    		}
    		r_len = recv(nSockId, recvBuf, MAX_LENGTH, 0);
    		recvBuf[r_len] = '\0';
    
    		//Say Hello to the domain
    		strcpy(sendBuf,"EHLO smtp.domain.de\r\n");
    
    		s_len = send(nSockId,sendBuf,strlen(sendBuf),0);
    
    		r_len = recv(nSockId,recvBuf,MAX_LENGTH,0);
    		recvBuf[r_len] = '\0';
    
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    
    		//Send from address
    		strcpy(sendBuf ,  "MAIL FROM: mail@domain.de\r\n");
    
    		s_len = send(nSockId,sendBuf,strlen(sendBuf),0);
    
    		r_len = recv(nSockId,recvBuf,MAX_LENGTH,0);
    		recvBuf[r_len] = '\0';
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    
    		//Send RCPT address
    		strcpy(sendBuf,"RCPT TO: <name@web.de>\r\n");
    
    		s_len = send(nSockId,sendBuf,strlen(sendBuf),0);
    
    		r_len = recv(nSockId,recvBuf,MAX_LENGTH,0);
    		recvBuf[r_len] = '\0';
                      //Hierbei kommt nun der Fehler 554
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    
    		// Send DATA
    		strcpy(sendBuf,"Subject: TestMail\r\n\r\n");
    		s_len = send(nSockId,sendBuf,strlen(sendBuf),0);
    
    		//Send body
    		strcpy(sendBuf,"TestMail\r\n.\r\n");
    
    		s_len = send(nSockId,sendBuf,strlen(sendBuf),0);
    
    		r_len = recv(nSockId,recvBuf,MAX_LENGTH,0);
    		recvBuf[r_len] = '\0';
    
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    
    		//Send QUIT
    		strcpy(sendBuf,"QUIT\n");
    
    		s_len = send(nSockId,sendBuf,strlen(sendBuf),0);
    
    		r_len = recv(nSockId,recvBuf,MAX_LENGTH,0);
    		recvBuf[r_len] = '\0';
    
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    
    		closesocket(nSockId);
    

    Kann jemand mir sagen was ich falsch mache?

    Gruß

    Karsten



  • So ich habe jetzt rausgefunden, dass ich dass mit SMTP-Auth machen muss.
    Dazu habe ich meinem Quellcode die folgenden Zeilen hinzugefügt.

    //Send AUTH Login
    		strcpy(sendBuf,"AUTH LOGIN\r\n");
    		s_len = send(nSockIdSMTP,sendBuf,strlen(sendBuf),0);
    		r_len = recv(nSockIdSMTP,recvBuf,MAX_LENGTH,0);
    		recvBuf[r_len] = '\0';
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    
    		//send Username
    		strcpy(sendBuf,"myusername\r\n");
    		s_len = send(nSockIdSMTP,sendBuf,strlen(sendBuf),0);
    		r_len = recv(nSockIdSMTP,recvBuf,MAX_LENGTH,0);
    		recvBuf[r_len] = '\0';
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    
                      //send password
    		strcpy(sendBuf,"mypassword\r\n");
    		s_len = send(nSockIdSMTP,sendBuf,strlen(sendBuf),0);
    		r_len = recv(nSockIdSMTP,recvBuf,MAX_LENGTH,0);
    		recvBuf[r_len] = '\0';
    		MessageBoxA(NULL, recvBuf, "Empfangsbestätigung", MB_OK);
    

    Bis nach Übergabe des Usernamens läuft auch alles korrekt. Nach senden des Passwortes bekomme ich die Meldung "535 authentification failed". Username und Passwort sind aber definitiv korrekt angegeben.

    Was mache ich hier immer noch falsch ?



  • Falsches Forum.



  • Username und Passwort sollten base64 codiert sein.



  • Schon probiert, dann gibts nen Time Out



  • @Scheppertreiber: Du hattest vollkommen recht. Nur das man das \r\n nicht mit encoden sollte:D



  • CrazyPlaya schrieb:

    @Scheppertreiber: Du hattest vollkommen recht. Nur das man das \r\n nicht mit encoden sollte:D

    Oh F... - das sind diese Macken die am Schwierigsten zu finden sind *fg*



  • ich hoffe dir ist bewußt das recv nicht immer eine komplette Zeile liest^^


Anmelden zum Antworten