Bash Script с использованием mailx для прикрепления почты - PullRequest
0 голосов
/ 12 января 2012

У меня есть скрипт 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

Ответы [ 3 ]

2 голосов
/ 12 января 2012

Если проблема связана с uuencode ... почему вы не можете попробовать опцию mailx -a, которая также может прикреплять файлы к почте.Проверьте эту ссылку для получения дополнительной информации.

1 голос
/ 12 января 2012
NOWDATE=`date +%m-%d-%Y`

Вам решать, но рассмотрите возможность использования формата ISO-8601, ГГГГ-ММ-ДД (%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

не то, что вы обычно получаете, если файл не существует. Я не знаю, что вызвало бы «Неизвестную системную ошибку», подобную этой.

Но вот альтернатива, которая (а) немного чище ИМХО, и (б) не требует 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
0 голосов
/ 28 августа 2013

У меня была такая же проблема.Сценарий bash, выполняющий запрос, сохраняющий файл csv и отправляющий его по почте.В моем случае он дал uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error

. Когда я выполнил скрипт, используя оболочку ksh, он прекрасно работал без каких-либо проблем.Вот так - ksh script.sh Это просто еще один указатель.Если uuencode выдает ошибку, попробуйте выполнить ее с помощью ksh;это может сработать для вас.

...