0

我有一个在 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
4

3 回答 3

2

如果问题出在 uuencode 上...为什么不能尝试 mailx -a 选项,它也可以将文件附加到邮件中。检查此链接以获取更多信息。

于 2012-01-12T05:22:39.730 回答
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
于 2012-01-12T04:57:50.640 回答
0

我遇到过同样的问题。一个执行查询、保存 csv 文件并通过邮件发送的 bash 脚本。就我而言,它给了uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error

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

于 2013-08-28T09:32:50.247 回答