Linux のみと互換性のある C プログラムで電子メールを送信しようとしています。メッセージを読んだり受信したりする必要はなく、数分ごとにメールを送信するだけなので、sendmailを使用してこれを行うことは問題ありません。
FILE *email = popen("/usr/lib/sendmail -t", "w");
if (email != NULL) {
fprintf(email, "To: ygvojpqa@guerrillamail.com\r\n");
fprintf(email, "From: noreply@mydomain.tld\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ボックスで何かをポーリングして、メッセージが通過したことを確認できる方法があるかどうか疑問に思っています。それが役立つ場合、私は MTA として exim4 を使用しています。また、exim4 メール キューも調べますmailq
が、送信されたメールに関するステータスは記録されません。ログに記録される唯一のエラーは、TO 電子メールが無効であり、フリーズした場合です。しかし、インターネットがない場合、通過しなかったことを示すコードはありません。
何か案は?