ゲストOSに固定メールサーバーを使用して電子メールを送信するように指示します。

ゲストOSに固定メールサーバーを使用して電子メールを送信するように指示します。

Dockerコンテナでpostfixを実行しています。 cronjobが電子メールを送信しようとしましたが、応答します。

“(CRON) info (No MTA installed, discarding output)” error in the syslog

これによると協会、解決策は、CRONが電子メールを送信できるようにpostfixをインストールすることです。

このホストでpostfixを実行していますが、それを使用する方法はありますか?別のホストがありますが、postfixは実行されていません。リモートドッカーメールサーバーも使用するように指示できますか?

答え1

問題は、postfixが実行されていないことではなく、ホストのマッピングされたポート25または587でリッスンする必要があることです。このような場合でもホストにpostfixがインストールされていない場合は、メール(標準入力またはコマンドライン引数から取得)をそのポートに送信するインストーラがインストールされていない可能性があります。

クライアントプログラムをインストールするとsSMTPまたはメール転送プロトコルしかし、私は私が使っているcrontabエントリの周りの小さなラッパーでこの問題を解決しました。ラッパーは、プログラム(「実際の」crontab etnryと呼ばれる)がゼロ以外の終了値で終了した場合、または出力に「error:」文字列が含まれている場合にのみメッセージを送信します。これにより、プログラムが正常に実行された場合に、システムが電子メールを受信できない期間が短縮されます。このプログラムはPython標準ライブラリsmtpモジュールを使用してキャプチャされた出力を送信します。

ラッパーはランチャーを使用し、subprocess.check_output(cmd, stderr=subprocess.STDOUT)以下を使用してエラーの結果を送信します。

 smtp = smtplib.SMTP(host="", port=0)  # by default 'localhost' and 25
 smtp.connect()
 smtp.sendmail(
     from_email, to_email_list,
     email_header_and_body
 )

また、ホストとポートを設定して他のDockerコンテナでタスクを実行するためにも使用されます。

関連情報