Bash 脚本在单个命令行中发送电子邮件

Bash 脚本在单个命令行中发送电子邮件

我编写一个 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]

所有这些都假设系统具有正确配置的邮件传输代理。

相关内容