在 bash 脚本中使用 mailx 发送电子邮件,如果需要结果则等待

在 bash 脚本中使用 mailx 发送电子邮件,如果需要结果则等待

我正在编写一个 bash 脚本,用于向本地用户 root 发送一封带有附件的电子邮件。

我注意到,mailx即使命令行参数无效,也会分叉一些帮助程序并立即以退出状态 0 终止:

localhost:~/basinsrv # mailx -s aaa root -a bbb </dev/null ; echo $?; 0
localhost:~/basinsrv # sendmail: invalid option -- 'a'
sendmail: invalid option -- 'a'
sendmail: fatal: usage: sendmail [options]

如何等待mailx结果并以正确的错误代码终止?

实际上,我需要在发送之前对生成的邮件进行后处理。

是否可以不实际发送消息而仅将其保存到文件中?

mailx-12.5-31.7.x86_64

后缀-3.6.2-7.1.x86_64

答案1

解决错误问题的最干净的解决方案是首先确保参数正确。要修复您的示例,请将收件人放在命令行末尾:

mailx -s 'subject here' -a 'X-Sent-Using: myscript.sh' root </dev/null

但即便如此,它也不会等待sendmail(在你的情况下是 Postfix),因为它不是这样写的。

至于电子邮件的后处理,你无法做到这一点。您需要做的就是直接与sendmail.例如,

[email protected]             # My email address
to=root                         # Recipient address
(
    echo "From: $from"
    echo "To: $to"
    echo "Subject: it's a fine day"
    echo "X-Sent-Using: ${0##*/}"
    echo
    cat "$message_body_file"    # Let's hope this file exists
) | sendmail "$to"              # May need /usr/sbin/sendmail

相关内容