単一のコマンドラインから電子メールを送信するBashスクリプト

単一のコマンドラインから電子メールを送信するBashスクリプト

localhost接続が拒否されたときに電子メールを送信するようにbashスクリプトを作成していますが、接続が開かれたときに電子メールを書き込まないでください。たとえば、

netcat -z localhost 8287
if [ $? -ne 0 ]; then
  echo " Connection refused" |/usr/lib/sendmail -s "Port  doesn't function "  [email protected]
else
  echo "open"
fi

このbashスクリプトを起動すると動作しません。 sendmailをメールに置き換え、sendEmailも交換しましたが、毎回異なるエラーが発生します。

答え1

私のシステムでは、以下が機能します。

if ! nc -z $host $port; then
    echo "This message intentionally left blank" | mail -s "TCP port $port is not open on $host" $emailaddress
else
    : Do whatever you wanted to do
fi

システムに存在しない場合は、tail -f /var/log/maillogスクリプトを実行してメッセージが配信されない理由を確認してください。

答え2

努力する:

/usr/lib/sendmail -oi -t << EOF
Subject: Port doesn't function
To: [email protected]

Connection refused
EOF

これはかなり移植性がなければなりません(sendmail/usr/libの場所を試してみるか、/usr/sbin存在しない場合は参照できます)sendmail$PATH

-oiあるいいえ単一行の終端として「.」を検討してください(ここでは必要ありませんが、一般的には便利です)。

POSIX準拠のシステムでは、以下も使用できますmailx

echo Connection refused | mailx -s "Port doesn't function" [email protected]

これらすべては、システムにメール転送エージェントが正しく設定されていると想定しています。

関連情報