电子邮件命令的异常处理

时间:2011-08-16 10:25:46

标签: linux shell mailx

如何在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`;

2 个答案:

答案 0 :(得分:0)

一种方法是处理mailx进程退出代码,如果它是非零解析其标准错误输出流(您的命令行重定向到/dev/null)。

另一种方法是使用,例如Python's smtplib。它会将错误报告为异常,例如smtplib.SMTPRecipientsRefusedsmtplib.SMTPDataError等,这样可以更轻松地将错误告诉另一个错误。

答案 1 :(得分:0)

  

处理mailx命令的负面情节:
   - 当电子邮件ID格式无效时,如ganeshfriends@gmail.com
   - 没有电子邮件正文时

您提供的电子邮件地址没有任何问题。

  • 如果“无效”,则表示电子邮件地址不存在,您无法事先进行测试:您必须向其发送电子邮件,看看您是否收到了收件人邮件服务器的退回 - 显然这很难实现自动化。
  • 如果您想检查电子邮件地址的格式,即使这很棘手(例如,请参阅this article)。至少,您可以检查地址是否包含 @ 以及这些字符周围的一些文本。在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