Smtp клиент зависает после отправки данных

Я хочу построить клиент stmp, используя c ++ для целей обучения.
После того, как мне удалось реализовать первоначальное подключение + авторизацию, я застрял при отправке сообщения после использования команды data.

Вот мой код

     void sendmail()
{

write_command("MAIL FROM: <[email protected]>");
write_command("RCPT TO: <[email protected]>");
write_command("DATA");
write_command("Subject: testmail"); // HANGS here after data command
write_command("BlaBlub");
write_command(" ");
write_command(".");
write_command("QUIT");
}

void write_command(std::string command)
{
ssize_t n;
empty_buffer();
command += '\r';
command += '\n';
char command_buffer[255];
strcpy(command_buffer, command.c_str());
n = write(sockfd,command_buffer,strlen(command_buffer));
if (n < 0){
error("ERROR writing to socket");
}
n = read_to_buffer();
if (n < 0) {
error("ERROR reading from socket");
}
printf("%s\n",this->buffer);
}

Я использую smtp.mailtrap.io на порт 25.

Вот суть с полным классом https://gist.github.com/xhallix/7f2d87a8b2eab4953d161059c2482b37

Вот выход сервера

Starting smpt client
220 mailtrap.io ESMTP ready

250-mailtrap.io
250-SIZE 5242880
250-PIPELINING
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-AUTH PLAIN LOGIN CRAM-MD5
250 STARTTLS

334 VXNlcm5hbWU6

334 UGFzc3dvcmQ6

235 2.0.0 OK

250 2.1.0 Ok

250 2.1.0 Ok

354 Go ahead
(HANGS HERE)

Спасибо за помощь мне

0

Решение

Команда DATA ожидает всего почтового сообщения, как показано Вот. write_command() отправляет сообщение по строкам и ожидает ответа после каждой строки. Поскольку сервер возвращает ответ после завершения почтового сообщения (после пустой строки и точки), он остается в режиме ожидания после первой строки сообщения. это фрагмент кода может быть полезным для вашего случая.

Кстати, вы должны поместить пустую строку между заголовком письма и телом, которое, я думаю, находится после строки темы. Также может случиться, что сервер отклонит сообщение без заголовков «От» и «До».

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]