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

使用mailx到邮件附件的Bash脚本,bash,shell,csv,attachment,mailx,Bash,Shell,Csv,Attachment,Mailx,我有一个bash脚本,在postgres中运行查询,它输出到csv。我想添加到脚本中,使用mailx将.csv文件通过电子邮件发送到特定的电子邮件 我遇到的问题是它不会通过电子邮件发送文件。我可以收到电子邮件,这样我就知道mailx设置正确了。我就是不能把它作为附件发电子邮件。它还可以通过电子邮件发送电子邮件正文中的输出 这是代码 #!/bin/bash NOWDATE=`date +%m-%d-%Y` PGPASSWORD=password psql -w -h hos

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

所以我遇到的问题是,当我运行.sh文件时,它会抛出这个错误

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

这取决于你,但是考虑使用ISO-8601格式,YYY-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
#/bin/bash
NOWDATE=`date+%m-%d-%Y`#但是%Y-%d-%m更好
DIR=/tmp/文件夹
FILE=FILE-$NOWDATE.csv
接受者=user@example.com
PGPASSWORD=password psql-w-h host-p5432-d数据库-U用户-o$DIR/$FILE

这取决于你,但是考虑使用ISO-8601格式,YYY-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
#/bin/bash
NOWDATE=`date+%m-%d-%Y`#但是%Y-%d-%m更好
DIR=/tmp/文件夹
FILE=FILE-$NOWDATE.csv
接受者=user@example.com

PGPASSWORD=password psql-w-h host-p 5432-d database-U user-o$DIR/$FILE如果问题是uuencode…为什么不能尝试mailx?一个也可以将文件附加到邮件的选项。
查看此项了解更多信息。

如果uuencode出现问题…为什么不能尝试mailx?该选项还可以将文件附加到邮件中。
查看此项了解更多信息。

我也有同样的问题。执行查询、保存csv文件并将其邮寄的bash脚本。在我的例子中,它给出了
uuencode:fopen-ing/tmp/folder/file-01-11-2011.csv:未知系统错误


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

我也有同样的问题。执行查询、保存csv文件并将其邮寄的bash脚本。在我的例子中,它给出了
uuencode:fopen-ing/tmp/folder/file-01-11-2011.csv:未知系统错误


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

路径是否正确?在你有文件的地方做一个
pwd
,然后仔细检查。当
/path/to/file
不存在时会发生此错误。此外,
sed-i'2d'filename
删除第二行,而不是前两行。要删除前两行,您需要执行
sed-i'1,2d'文件名
Jaypal。我同意评论是错误的,我发现我只需要删除第二行。。。我让它先删除第一个和第二个。英雄联盟好的,我会检查它。文件路径确实存在,它确实显示了正确的路径。呸。。。虽然我只是放置了一个常规路径来隐藏路径,但它确实显示了正确的路径。。不知道是不是$NOWDATE使它失效了,但是即使没有$NOWDATE,我还是用正确的文件名尝试了它,但仍然得到了错误。我可能缺少应该安装的内容吗?如果命令从命令行运行,那么它也应该从脚本运行:-)。尝试在变量周围放置大括号
uuencode/tmp/folder/file-${NOWDATE}.csv/tmp/folder/file-${NOWDATE}.csv | mailx-s“帐户没有针对“$NOWDATE”的信用卡报告”mail@gmail.com
路径
/tmp/folder/file-$NOWDATE.csv
正确吗?在你有文件的地方做一个
pwd
,然后仔细检查。当
/path/to/file
不存在时会发生此错误。此外,
sed-i'2d'filename
删除第二行,而不是前两行。要删除前两行,您需要执行
sed-i'1,2d'文件名
Jaypal。我同意评论是错误的,我发现我只需要删除第二行。。。我让它先删除第一个和第二个。英雄联盟好的,我会检查它。文件路径确实存在,它确实显示了正确的路径。呸。。。虽然我只是放了一个一般的路径来隐藏