我需要在mailx上附加一个文件,但目前我没有成功。
这是我的代码:
subject="Something happened"
to="somebody@somewhere.com"
body="Attachment Test"
attachment=/path/to/somefile.csv
uuencode $attachment | mailx -s "$subject" "$to" << EOF
The message is ready to be sent with the following file or link attachments:
somefile.csv
Note: To protect against computer viruses, e-mail programs may prevent
sending or receiving certain types of file attachments. Check your
e-mail security settings to determine how attachments are handled.
EOF
任何反馈意见都将受到高度赞赏。
更新 我添加了附件var以避免每次都使用该路径。
答案 0 :(得分:3)
您必须连接邮件的文本和未编码的附件:
$ subject="Something happened"
$ to="somebody@somewhere.com"
$ body="Attachment Test"
$ attachment=/path/to/somefile.csv
$
$ cat >msg.txt <<EOF
> The message is ready to be sent with the following file or link attachments:
>
> somefile.csv
>
> Note: To protect against computer viruses, e-mail programs may prevent
> sending or receiving certain types of file attachments. Check your
> e-mail security settings to determine how attachments are handled.
>
> EOF
$ ( cat msg.txt ; uuencode $attachment somefile.csv) | mailx -s "$subject" "$to"
提供消息文本有不同的方法,这只是一个接近原始问题的示例。如果该消息应该被重用,那么将它存储在文件中并使用该文件是有意义的。
答案 1 :(得分:1)
嗯,这是你遇到的最初几个问题。
您似乎假设邮件客户端将处理没有任何标头的uuencoded附件。那不会发生。
你在滥用I / O重定向:uuencode的输出和here-document都被送到mailx,这是不可能发生的。
你误用了uuencode:如果给出一个路径,它只是一个给出解码文件的名称,而不是输入文件名。给文件两次将为解码文件指定与读取的文件相同的名称。 -m标志强制base64编码。但是这仍然不会为mailx提供附件标题。
你最好能获得一份mpack,这将是你想要的。
如果你必须这样做,你可以这样做:
cat <<EOF | ( cat -; uuencode -m /path/to/somefile.csv /path/to/somefile.csv; ) | mailx -s "$subject" "$to"
place your message from the here block in your example here
EOF
还有很多其他的可能性......但是这个还有这里的文件 就像在你的例子中一样,很容易脱离我的脑海,并且没有涉及临时文件。