1

我从某人那里接手了一个脚本,bash 脚本通常运行良好,但还没有完全完善。因此,一般来说,简单地说,它会向人们发送一封电子邮件报告,该报告是从文本文件中获取的。所以,问题是这样的。该文本文件中的每一行代表应通过电子邮件发送给用户的数据。该脚本对数据进行格式化,以便于阅读并发送电子邮件。发送电子邮件时,用户 1 的电子邮件中有 3 行,用户 2 的电子邮件中有 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 为每个收件人发送一封电子邮件?不知道这里最好的方法是什么。任何输入将不胜感激!

4

1 回答 1

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}"
于 2013-10-02T20:10:53.003 回答