【问题标题】:Send one and not multiple emails with bash script使用 bash 脚本发送一封而不是多封电子邮件
【发布时间】:2013-10-02 19:11:50
【问题描述】:

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

【问题讨论】:

  • 您显示的行只发送一封电子邮件。你必须忘记那条线周围的循环

标签: bash email mailx


【解决方案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}"

【讨论】:

  • 我不知道我做错了什么,但我似乎无法让它工作。当我不加修改地运行代码时,它会运行,但不会发送电子邮件。例如,当我修改“${FILE%.txt}”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 2021-10-11
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
相关资源
最近更新 更多