【问题标题】:Tell Mutt to attach files (listed in file)告诉 Mutt 附加文件(在文件中列出)
【发布时间】:2015-11-19 06:02:17
【问题描述】:

我正在使用 Mutt 迈出第一步(在 Slackware 13.1 中使用 msmtp)。

我已经可以发送带有附件的邮件了:

cat mail.txt | mutt -a "/date.log" -a "/report.sh" -s "subject of message" -- myself@gmail.com

我想定义要附加到另一个文件中的文件,然后告诉 Mutt 读取它,如下所示:

mutt -? listoffilestoattach.txt

有可能吗?还是有类似的方法?

【问题讨论】:

    标签: linux bash shell mutt slackware


    【解决方案1】:

    您可以很容易地用文件名列表填充一个数组,然后将其用作-a 的参数。

    while IFS= read -r attachment; do
        attachments+=( "$attachment" )
    done < listoffilestoattach.txt
    for f in ../*.log; do
        attachments+=("$f")
    done
    
    mutt -s "subject of message" -a "${attachments[@]}" -- myself@gmail.com < mail.txt
    

    如果您使用的是bash 4 或更高版本,您可以将while 循环替换为(稍微)更易于交互的readarray 命令:

    readarray -t attachments < listoffilestoattach.txt
    

    如果看起来是这样,mutt 要求每个 -a 选项有一个文件,那么您需要一些稍微不同的东西:

    while IFS= read -r attachment; do
        attachments+=( -a "$attachment" )
    done < listoffilestoattach.txt
    for f in ../*.log; do
        attachments+=( -a "$f")
    done
    
    mutt -s "subject of message" "${attachments[@]}" -- myself@gmail.com < mail.txt
    

    使用readarray,试试

    readarray -t attachments < listoffilestoattach.txt
    attachments+=( ../*.log )
    for a in "${attachements[@]}"; do
        attach_args+=(-a "$a")
    done
    mutt -s "subject of message" "${attach_args[@]}" -- myself@gmail.com < mail.txt
    

    【讨论】:

    • 如何将 ls ../*.log 放入附件中?
    • attachments+=( ../*.log )
    • 不起作用@chepner。仅附加一个文件,其余文件以某种方式作为电子邮件的目的地。
    • 我看到关于 -a 是否可以接受多个参数的手册页存在冲突。尝试attachments+=(-a "$attachment"),然后从 mutt 命令行中删除 -a。 (mutt.org/doc/man_page.html 只说一个文件,所以这可能是确定的。)
    • 这样它就可以正确地发送到目的地(文件不会被附加为目的地)。但是只附加了一个文件。我这样做:attachment+=(../*.log) attachments+=(-a "$attachment"),对吗?
    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    相关资源
    最近更新 更多