使用uuencode将变量中的多个附件附加到电子邮件并使用sendmail发送

时间:2013-11-12 21:29:16

标签: bash sendmail uuencode

我目前有一个脚本:

cat $body | uuencode $attachment $attachment | sendmail $sender -t

我应该调整什么以便$附件可以是多个附件?我想出了下面的内容,但看起来不正确吗?

cat $body |
for i in $attachments 
do
uuencode $i $i
done
| sendmail $sender -t

3 个答案:

答案 0 :(得分:0)

通常,您不希望在参数中存储文件名列表。默认情况下IFS,文件名中嵌入的空格会引发问题。相反,声明一个包含文件的数组

a=(file1 file2 file3 file4)
(for file in "${a[@]}"; do uuencode "$file" "$(basename "$file")"; done) |
 sendmail $sender -t

答案 1 :(得分:0)

尝试以下脚本:

# specify list of email recipients
recipients=...
# specify envelope sender address
sender=...
( 
  cat $body
  for i in $attachments 
  do
    uuencode $i $i
  done
) | sendmail -f$sender -i -- $recipients
  • $body文件必须包含邮件标题(例如Subject:),并由邮件正文中的空行分隔
  • 恕我直言,通过命令行指定收件人而不是让sendmail从标题中提取收件人是一种更好/更安全的方式。

答案 2 :(得分:0)

FILES =“/ rollovers / DailyCadRpt。* / rollovers / DailyFireRpt。*”

(对于$ FILES中的f;执行uuencode“$ f”“$ f”;已完成)| mail -s“Subject”recipient_email@domain.com

以上在AIX 6.1中用于通配符。但是,您必须使用10-pad星号。数字8上方的星号在AIX中不起作用。此外,这没有任何正文。但这与其他例子一样。您可以使用空格作为分隔符添加更多文件,如我的示例所示。此外,您不能将Daily *与星号一起使用。 AIX就是不会这样做。星号必须在文件名中的句点之后出现。我们的报告将日期添加到报告名称中,以句点分隔。它保留了我们的归档命名模式,并且每天都可以抓取它而无需特定的文件名。