Я пытаюсь отправить электронное письмо в программе на C, которая совместима только с Linux. Я хорошо использую sendmail для этого, так как мне не нужно читать / получать сообщения, просто отправляй электронное письмо каждые несколько минут.
FILE *email = popen("/usr/lib/sendmail -t", "w");
if (email != NULL) {
fprintf(email, "To: [email protected]\r\n");
fprintf(email, "From: [email protected]\r\n");
fprintf(email, "Subject: Alert\r\n");
fprintf(email, "MIME-Version: 1.0\r\n");
fprintf(email, "Content-Type: text/plain\r\n\r\n");
fprintf(email, "A fault occured.\r\n");
if(pclose(email) < 0) {
std::cout << "pclose fail\n";
return 1;
}
} else {
std::cout << "popen fail\n";
return 1;
}
return 0;
Этот код работает отлично, пока есть подключение к интернету и нет ошибок. Тем не менее, я не могу найти способ проверить, действительно ли электронное письмо прошло успешно и было ли оно отправлено. Пример: я отключаю свой интернет и запускаю приведенный выше фрагмент, без ошибок на popen или pclose, и кажется, что он работает нормально, но, конечно, я не получаю его, потому что у меня нет интернета.
Мне интересно, есть ли способ, чтобы после отправки электронного письма без ошибок я мог что-то опросить на коробке linux, чтобы убедиться, что сообщение прошло. Я использую exim4 в качестве моего MTA, если это помогает. Я также смотрю в почтовой очереди exim4 mailq
но он не регистрирует статус отправленной электронной почты. Единственные ошибки, которые это регистрирует, — то, если электронная почта TO недействительна, и это замораживает это. Но когда нет интернета, нет кода, который говорит, что он не прошел.
Есть идеи?
Задача ещё не решена.
Других решений пока нет …