linux - 查找 sendmail 版本(sSMTP 或 Postfix 或其他)

标签 linux bash sendmail

我有一个在多个服务器上运行的脚本。一些服务器使用 sSMTP,一些服务器使用 postfix

我想知道我的服务器在运行时运行的是哪个版本的sendmail,因为-tsSMTP中不被支持但是是强制性的在后缀

现在挑战开始了。

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/

相关文章:

c# - 如何通过 Sendgrid 发送安全电子邮件?

java - 使用 Gmail API 发送电子邮件时出错?

php - 从 mysql 创建 excel 并在 php 中将其作为附件电子邮件发送

regex - 在文件中查找函数并打印其内容的命令

linux - 如何获取与 fd 关联的设备类型

bash - 如何在 if 语句中使用位运算符?

Linux shell 更改目录,找不到文件

linux - 为 movidius 神经计算棒 (ncsdk) 构建示例时出现意外问题

php - Yocto PHP5镜像安装

python - 激活 virtualenvwrapper 并在登录时运行 ssh-agent