我已经从某人手中接过了一个脚本,而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每个收件人发送一封电子邮件?不知道这里最好的方法是什么。任何意见都将不胜感激!
答案 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}"