使用mailx到邮件附件的Bash脚本



我有一个bash脚本,它在postgres中运行查询,并输出到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

如果问题出在uuencode。。。你为什么不试试mailx呢?这个选项也可以将文件附加到邮件中。查看此链接了解更多信息。

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)是一个更干净的IMHO,(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

我遇到了同样的问题。一个bash脚本执行查询,保存csv文件并邮寄它。在我的例子中,它给出了uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error

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

相关内容

  • 没有找到相关文章

最新更新