使用mailx邮件附件的Bash脚本

时间:2012-01-11 21:44:23

标签: bash shell csv attachment mailx

我有一个在postgres中运行查询的bash脚本,它输出到csv。我想添加到该脚本以使用mailx将.csv文件通过电子邮件发送到特定的电子邮件。

我遇到的问题是它不会通过电子邮件发送文件。我可以收到电子邮件,所以我知道mailx设置正确。我只是无法通过电子邮件将其作为附件发送。它还可以通过电子邮件发送电子邮件正文中的输出。

所以这是代码。

    #!/bin/bash
    NOWDATE=`date +%m-%d-%Y`
    PGPASSWORD=password psql -w -h host -p 5432 -d database -U user -o /tmp/folder/file-$NOWDATE.csv <<EOF
    Query is here

    # remove the first 2 lines of the report as they are headers
    sed -i '2d' /tmp/folder/file-$NOWDATE.csv

    uuencode /tmp/folder/file-$NOWDATE.csv | mailx -s "Accounts No Credit Card Report for '$NOWDATE'" mail@gmail.com

我尝试过mailx部分:

    uuencode /tmp/folder/file-$NOWDATE.csv /tmp/folder/file-$NOWDATE.csv | mailx -s "Accounts No Credit Card Report for '$NOWDATE'" mail@gmail.com

    uuencode /tmp/folder/file-$NOWDATE.csv file-$NOWDATE.csv | mailx -s "Accounts No Credit Card Report for '$NOWDATE'" mail@gmail.com

所以我得到的问题是当我运行.sh文件时它会吐出这个错误。

    uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error

3 个答案:

答案 0 :(得分:2)

如果问题出在uuencode上......为什么你不能尝试mailx -a选项,它也可以将文件附加到邮件中。 请查看此link了解详情。

答案 1 :(得分:1)

NOWDATE=`date +%m-%d-%Y`

取决于您,但考虑使用ISO-8601格式,YYYY-MM-DD(%Y-%m-%d)。除了其他优点之外,它排序很好。

# remove the first 2 lines of the report as they are headers
sed -i '2d' /tmp/folder/file-$NOWDATE.csv

这不会删除前两行,只删除第二行。将'2d'更改为'1,2d'(但请参见下文)。

请注意,这会修改文件。

uuencode /tmp/folder/file-$NOWDATE.csv | mailx [...]

如果uuencode只有一个文件名,则从标准输入读取并将名称放入其输出中。您的以下文字“我已尝试使用mailx部分:”......表示您可能已经意识到这一点 - 但您没有向我们展示修复该问题的代码,而不是在代码段中。

您收到的错误消息:

uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error
如果文件不存在,

不是通常会得到的内容。我不知道是什么原因导致“未知的系统错误”。

但这是另一种选择,(a)有点清洁恕我直言,(b)不需要uuencode尝试读取文件:

#!/bin/bash

NOWDATE=`date +%m-%d-%Y` # but %Y-%d-%m is better
DIR=/tmp/folder
FILE=file-$NOWDATE.csv
RECIPIENT=user@example.com

PGPASSWORD=password psql -w -h host -p 5432 -d database -U user -o $DIR/$FILE <<EOF
... Query is here
EOF

tail -n +3 $DIR/$FILE | uuencode $FILE | \
    mailx -s "Accounts No Credit Card Report for '$NOWDATE'" $RECIPIENT

答案 2 :(得分:0)

我有同样的问题。执行查询的bash脚本,保存csv文件并将其邮寄。就我而言,它给出了uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error

当我使用ksh shell执行脚本时,它完全正常,没有任何问题。像这样 - ksh script.sh这只是另一个指针。如果uuencode给出错误,那么尝试使用ksh执行它;它可能对你有用。