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コンテナでタスクを実行するためにも使用されます。