我正在编写一个 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