在Unix系统中,如何使用mutt命令发送包含多个附件的单封邮件?

22

我的要求是将文件夹中的所有CSV文件附加到一封邮件中并以单个邮件发送。

这是我尝试过的方法:

mutt -s "subject" -a *.csv -- abc@gmail.com < subject.txt

上述命令不起作用(无法识别多个文件)并且会抛出错误

Error sending message, child exited 67 (User unknown.).
Could not send the message.

然后我尝试使用多个 -a 选项,如下所示:

mutt -s "subject" -a aaa.csv -a bbb.csv -- abc@gmail.com < subject.txt

这个方案按预期运作。 但是如果有100个文件的话,这种方法就不现实了。我应该能够使用文件掩码(例如 *.csv 取所有 csv 文件)。有没有办法在单个命令中使用类似于 *.csv 的方式呢?

谢谢


1
你使用的mutt版本是什么?像你第一次尝试的命令在我从最近版本的mercurial存储库编译的副本中有效,但对此的支持始于1.5.15版本。 - qqx
@qqx 是吗?那太好了。我正在使用Mutt 1.4.1.. - Mariappan Subramanian
4个回答

31

Mutt不支持这种语法,但这并不意味着不可能。您只需要构建mutt命令即可。

mutt -s "subject" $( printf -- '-a %q ' *.csv ) ...

$( ... ) 中的命令会产生类似于这样的结果:

-a aaa.csv -a bbb.csv -a ...

1
这是使用单个命令发送多个文件的示例 -
mutt -s "Subject" -i "Mail_body text" email_id@abc.com -c email_cc_id@abc.com -a attachment1.pdf -a attachment2.pdf 

在命令行的末尾使用-a来添加附件。
一些Linux系统有附件大小限制。大多数情况下,它支持较小的大小。

0
#!/bin/bash

from="me@address.com"
to="target@address.com"
subject="pdfs $(date +%B) $(date +%Y)"
body="You can find the pdfs from  $(date +%B) $(date +%Y)"
# here comes the attachments 
mutt -s "$subject" $( printf -- ' -a %q' $PWD/*.pdf ) -- $to <<EOF 
 Dear Mr and Ms,


 $(echo $body)
 $(cat ~/.signature)
 EOF

但是它无法处理文件名中的转义字符,例如MacOS中可能出现的"\[5\]"。 我创建了一个脚本,在文件夹中收集所需的PDF文件,然后只需从该位置运行脚本。因此每月报告都会发送...无论有多少个pdf(数量可能会变化),但也不应有空格。


0
我得到反斜杠(\),此外。
Daily_Batch_Status{20131003}.PDF
Daily_System_Monitoring{20131003}.PDF

printf -- '-a %q ' *.PDF
-a Daily_Batch_Status \ {20131003 \ }.PDF -a Daily_System_Monitoring \ {20131003 \ }.PDF

反斜杠正在转义花括号,更让我担心的是空格。否则,使用正确转义的字符提供文件名是可以接受的。 - McKean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接