“邮件”在脚本中不起作用,其工作方式与在命令行中起作用的方式相同

“邮件”在脚本中不起作用,其工作方式与在命令行中起作用的方式相同

如果我从 Unix 终端运行下面​​这行代码/命令,它会按预期工作,但如果我将其包含在脚本中并运行该脚本,则不会工作 - 完全相同。

我希望 X-Priority 在 Outlook 中将邮件显示为高优先级。如果我从命令行运行它,我会看到电子邮件正确显示为高优先级,并且我看到文件已附加,并且正文按预期显示。但是,如果我编写一个 shell 脚本并运行该脚本,邮件将格式化为文本,附件将附加到电子邮件正文中,并且电子邮件在 Outlook 中显示正常。

不确定我做错了什么。任何帮助我都感激不尽。

Shell 脚本

#!/bin/sh
echo "Message Body" | mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"

还用 Shell 脚本进行了测试

#!/bin/bash
echo "Message Body" | /usr/bin/mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"

命令行

echo "Message Body" | mail -r "[email protected]" -c "[email protected]" -s "$(echo -e "Message Subject\nX-Priority: 1")" -a "logFile.log" "[email protected]"

编辑:关于进一步研发的更多细节/观察:

在主题中,在我的实际命令中,有一个变量赋值,如MyApp : ${HostName} : Restarted\nX-Priority: 1HostName是我在脚本中定义的变量。如果我用像这样的变量硬编码值替换MyApp : myserver : Restarted\nX-Priority: 1,命令行和脚本的行为完全相同。如果我将变量保留在命令行中,它会按预期工作(X-Priority 部分),但主题会按MyApp : : Restarted预期出现,因为变量未定义。

我尝试在脚本中添加未定义的变量,但仍然不起作用。

希望这能让大家对这个问题有更多的了解。


注意:我最初在 stackoverflow 上问了这个问题。但有人建议我在这里问 -https://stackoverflow.com/questions/75585298/mail-not-working-in-script-same-way-it-is-working-from-command-line

--

答案1

您使用什么操作系统/发行版?

许多发行版通常使用 BSDmailx作为命令的别名,但可能存在替代方法,或者当您的脚本运行时,它具有不同的 PATH,因此使用与您期望的不同的程序。(因为您的操作系统可能对用户应该做什么mail有其他想法。)mail

从你的终端尝试:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

然后在你的脚本中执行相同的操作,看看 PATHS 是否有不同

BSDmailx将会位于类似/usr/bin/mailx

不过,它似乎与mail你使用的任何命令都有不同的选项。(参见man mailx/ man mail)。你是否试图获取:

Subject: Message Subject 
  X-Priority: 1

或者主题,然后是附加标题:

Subject: Message Subject
X-Priority: 1

bash如果您尝试以这种方式使用变量来调用另一个命令,则会从变量中删除换行符。

如果它是mailx

  • -A指定附加标头字段在命令行上例如“X-Loop:foo@bar”等。

我会尝试类似的事情:

#!/bin/bash
echo "Message Body" | /usr/bin/mailx -a "X-Priority: 1" -s "Message Subject" -r [email protected] -c [email protected] -- [email protected]

不过,我认为没有一种(简单的)方法可以让普通的 mail/mailx 添加附件。它做不到这一点。

您可以使用其他方法,mutt例如neomutt

options:

  --            Special argument forces NeoMutt to stop option parsing and treat
                remaining arguments as addresses even if they start with a dash

  -a <file>     Attach one or more files to a message (must be the last option)
                Add any addresses after the '--' argument

  -c <address>  Specify a carbon copy (Cc) recipient

  -s <subject>  Specify a subject (must be enclosed in quotes if it has spaces)


听起来无论如何它都会做更符合你要求的事情。

echo "Message Body" | mutt -s "Message Subject" \ 
-e "my_hdr X-Priority: 1" \
-e "my_hdr From: [email protected]" \ 
-c [email protected] \
-a /path/to/logFile.log \
-- [email protected]


echo "Message Body" | mutt -s "Message Subject" -e "my_hdr X-Priority: 1" -e "my_hdr From: [email protected]" -c [email protected] -a /path/to/logFile.log -- [email protected]

相关内容