簡體   English   中英

使用mailx的Bash腳本來發送附件

[英]Bash Script using mailx to mail attachment

我有一個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 -a選項,該選項也可以將文件附加到郵件上。 檢查此鏈接以獲取更多信息。

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

我遇到過同樣的問題。 一個bash腳本,用於執行查詢,保存csv文件並將其郵寄。 就我而言,它給出了uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error

當我使用ksh shell執行腳本時,它運行良好,沒有任何問題。 像這樣ksh script.sh這只是另一個指針。 如果uuencode給出了錯誤,請嘗試使用ksh執行; 它可能為您工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM