Sendmail 在 Bash 脚本中无法正常工作

Sendmail 在 Bash 脚本中无法正常工作

这是我在作为 cronjob 运行的 bash 脚本中的代码。cronjob 以 root 身份运行。

   /usr/sbin/sendmail [email protected]<<EOF
   subject:Backup Error!
   from:backup@server01
   $error
        EOF

这之后有代码,我收到的电子邮件如下:

从机器上的 root 用户。

并且该消息包括:

   subject:Backup Error!
   from:backup@server01
   $error
        EOF
   More code...
   that is in the script
   all the way to the end...

我尝试过其他变体,这是我找到的最接近的变体。我在常规脚本中尝试过,效果很好。发生了什么,我该如何发送这封电子邮件,并指定主题和表单发件人?

答案1

前面的回答已经提到了:

  • “此处文档”的坏结尾(END)
  • 标题和正文之间缺少空行

其他修复:

  • -i命令行选项停止对以点开头的行进行特殊处理
  • --将命令行选项与收件人地址分开(良好的风格建议)

修正脚本:

/usr/sbin/sendmail -i -- [email protected] <<EOF
subject: Backup Error!
from:backup@server01

$error
EOF

答案2

我建议您不要在第二个限制字符串的前面或后面使用任何空格字符EOF。如果您在限制字符串的前面或后面仅使用一个空格,则该特殊用途的代码块将永远无法工作。因此,仅使用:

EOF

你应该读一些这样的 Bash 脚本指南,比如第 19 章 此处文档

答案3

Sendmail(似乎电子邮件也是这样)要求在标题和正文之间留一个空行。以下示例有效。

$ sendmail [email protected] <<EOF
> subject: testing
> from: [email protected]
> 
> This is my body!
> EOF

(显然,将其与其中的 s 一起粘贴是>行不通的,只需改变您正在执行的操作,以便在标题和错误消息之间有一个空白行)。

相关内容