mailx命令失败时如何处理异常,
以下是处理但不工作的开始,
处理 mailx 命令的负面场景:
当电子邮件 ID 格式无效时,例如 ganeshfriends@gmail.com 当没有电子邮件正文时
$rst = `/usr/bin/echo \"test123456\" | /usr/bin/mailx -s \'test subject\' ganeshfriends\@gmail.com 2>/dev/null; >> ~/151534/email_err.cfg`;
处理 mailx 命令的负面情况:
- 当电子邮件 ID 是无效格式时,例如 ganeshfriends@gmail.com
- 当没有电子邮件正文时
您作为示例提供的电子邮件地址没有任何问题。
如果您想检查电子邮件地址的格式,即使这样也很棘手(例如,请参阅这篇文章)。至少,您可以检查地址是否包含 a@和 a.以及这些字符周围的一些文本。在 bash 你可以写
if [[ "$addr" == ?*@?*.?* ]]; then echo OK; else echo BAD; fi
要测试主体,您必须捕获程序的输出并检查它是否为空:
body=$( /some/program ...)
if [ -z "$body" ]; then
echo "ERROR: email body is empty!"
exit
fi
echo "$body" | /usr/bin/mailx -s "subject" recipient@example.com
一种方法是处理mailx
进程退出代码,如果它非零,则解析其标准错误输出流(您的命令行重定向到/dev/null
)。
另一种方法是使用例如Python 的 smtplib。它将错误报告为异常,如smtplib.SMTPRecipientsRefused
,smtplib.SMTPDataError
等,这使得区分一种错误与另一种错误变得更容易。