使用send()与C中的SMTP服务器对话



我正在编程一个交互式SMTP客户端,它可以通过终端与SMTP服务器进行通信。到目前为止,我已经建立了一个连接(第一个recv()之后的服务器响应220(,然后尝试向服务器发送HELO。send函数给我的返回值为15,所以应该可以工作。但后来我尝试读取响应(应该是250 OK(,但程序会阻塞,什么也不返回。我正在使用伪造的SMTP作为测试服务器。

这是我到目前为止的代码:

char IPADDRESS []= "127.0.0.1";
int initConnect(){
int sock = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT,NULL, 0);
struct sockaddr_in serv_addr;
memset(&serv_addr, '0', sizeof(serv_addr));
serv_addr.sin_port = htons(25);
serv_addr.sin_family = AF_INET;
if(inet_pton(AF_INET, IPADDRESS, &serv_addr.sin_addr) > 0){
connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
}else{
return -1;
}
return sock;
}

int main(void){
char buffer[1024];
memset(buffer, 0, sizeof(buffer));
int FLAGS = 0;
int fd;
fd = initConnect();
if(fd == -1){
printf("Error occured while connecting to the Server");
exit(1);
} else {
printf("  ->   Connectedn");
}
// get response from Server after connection
int recBytes =   recv(fd, buffer, sizeof(buffer), FLAGS);
printf("Server: %s", buffer);
// send HELO cmd to Sever (if < 0 error)
int ret = send(fd, "HELO 127.0.0.1n", strlen("HELO 127.0.0.1n"), FLAGS);
printf("nSend bytes: %in", ret);
// get response from Server after HELO (program blocks here)
memset(buffer, 0, sizeof(buffer));
recBytes = recv(fd, buffer, sizeof(buffer), FLAGS);
printf("nServer: %s", buffer);
}

SMTP RFC说:

行由零个或多个数据字符组成,以序列ASCII字符";CR";(十六进制值0D(后跟ASCII字符";LF";(十六进制值0A(。

您的代码只发送<LF>(n(,因此需要更改为rn

最新更新