我有一个在多个服务器上运行的脚本。一些服务器使用 sSMTP,一些服务器使用 postfix。
我想知道我的服务器在运行时运行的是哪个版本的sendmail,因为-t
在sSMTP中不被支持但是是强制性的在后缀
现在挑战开始了。
sendmail -V
sSMTP 变体输出 sSMTP 2.64(根本不是 sendmail)
但
postfix 变体没有用于显示版本的 -V
选项。
我设法通过以下代码片段完成了它。
VER=$(sendmail -V 2>/dev/null)
if [[ "sSMTP" == $VER* ]]; then
echo $BODY | sendmail $EMAIL #sSMTP
else
echo $BODY | sendmail -t $EMAIL #postfix
fi
是否有更有效的方法来实现这一点?
我想找到我的服务器中的 sendmail 变体。不仅仅是后缀或 sSMTP。
最佳答案
这个怎么样?
type -p sendmail |
xargs dpkg -S
Some packages将它放在 /usr/lib
中,将其他放在 /usr/sbin
中,等等。这显然要求它们位于您的 PATH
中。
dpkg -S
告诉你安装文件的包的名称,type -p
用于查找你的 sendmail
PATH
这样我们就可以将其传递给 dpkg -S
。这显然需要基于 Debian 的发行版(Ubuntu、Mint,你有什么)。
在 ssmpt
系统上,PATH
上有 /usr/lib
,输出是
ssmtp: /usr/lib/sendmail
在 PATH
略有不同的 Postfix 系统上,
postfix: /usr/sbin/sendmail
我不认为我有可以尝试此操作的 Exim 或 Qmail 系统,但可以预见它们应该是相似的。
顺便说一句,如果您想通过 echo
的管道将多行字符串(例如电子邮件)传递给 sendmail
,您将需要引用多行变量以使其工作。
echo "$body" | sendmail -t
如果您想使用sendmail -t
,"$body"
应该包含To:
header for sendmail
来解析——这就是 -t
选项的作用,所以我认为在这种情况下您不需要带有收件人地址的变量。
此外,不要为您的私有(private)变量名使用大写字母; uppercase variable names are reserved for system use.
最后,正如其他地方已经评论的那样,我相信 SSMTP 和 Postfix 都支持 sendmail -t
,就像我见过的几乎所有其他 Sendmail 实现一样。所以最后,我认为您实际上不需要此代码来实现该目标。
关于linux - 查找 sendmail 版本(sSMTP 或 Postfix 或其他),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39668980/