KornShell(ksh)代码用mailx和uuencode发送附件?

时间:2008-09-18 20:03:13

标签: shell unix scripting solaris ksh

我需要在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以避免每次都使用该路径。

2 个答案:

答案 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)

嗯,这是你遇到的最初几个问题。

  1. 您似乎假设邮件客户端将处理没有任何标头的uuencoded附件。那不会发生。

  2. 你在滥用I / O重定向:uuencode的输出和here-document都被送到mailx,这是不可能发生的。

  3. 你误用了uuencode:如果给出一个路径,它只是一个给出解码文件的名称,而不是输入文件名。给文件两次将为解码文件指定与读取的文件相同的名称。 -m标志强制base64编码。但是这仍然不会为mailx提供附件标题。

  4. 你最好能获得一份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
    

    还有很多其他的可能性......但是这个还有这里的文件 就像在你的例子中一样,很容易脱离我的脑海,并且没有涉及临时文件。