使用bash脚本发送一封而不是多封电子邮件

时间:2013-10-02 19:11:50

标签: bash email mailx

我已经从某人手中接过了一个脚本,而bash脚本的效果一般很好,但它并没有完全抛光。因此,一般而言,简单来说,它会向人们发送电子邮件报告,从文本文件中获取。所以,问题是这个。该文本文件中的每一行代表应通过电子邮件发送给用户的数据。脚本格式化数据,因此易于阅读和发送电子邮件。发送电子邮件时,用户1的电子邮件中有3行,user2的电子邮件中有2行。很好,效果很好。然而,它不是向用户1和用户2分别发送一封电子邮件,而是向用户1发送3个相同的电子邮件,向用户2发送2个相同的电子邮件。基本上复制电子邮件。我想这不是一个大问题,如果他们只收到2封电子邮件,但是,如果他们有20-30行呢?他们可以收到20-30条相同的电子邮件。

     Line1:   User 1  UnitCost Total Cost RemainingBalance
     Line2:   User 1  UnitCost Total Cost RemainingBalance
     Line3:   User 1  UnitCost Total Cost RemainingBalance
     Line4:   User 2  UnitCost Total Cost RemainingBalance
     Line5:   User 2  UnitCost Total Cost RemainingBalance

所以,我想知道的是,这是发送电子邮件的行:

printf "$USER\n$MESSAGE\n\n$DETAIL" | mailx -r admin@email.com -s 
"Email for balance" "$EMAIL"

那么,有没有办法在不重写脚本的情况下让mailx每个收件人发送一封电子邮件?不知道这里最好的方法是什么。任何意见都将不胜感激!

1 个答案:

答案 0 :(得分:1)

创建一个临时目录

TMPDIR=xxx
mkdir "${TMPDIR}" || { echo "failed to create temporary dir ${TMPDIR}";exit 1;}

将输出重定向到临时目录中的文件

printf "$USER\n$MESSAGE\n\n$DETAIL"  >>"${TMPDIR}/${EMAIL}.txt"

然后从文件名中检索电子邮件并发送临时文件内容

for FILE in "${TMPDIR}"/*.txt; do
  mailx -r admin@email.com -s "Email for balance" "${FILE%.txt}" <"${FILE}"
done
rm -r "${TMPDIR}"