我有一个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执行它;它可能对你有用。