Pergunta

Eu tenho um script que executa uma consulta no postgres, ele gera para CSV. Eu quero acrescentar a esse script para uso mailx para enviar e-mail o arquivo .csv para o e-mail particular.

O problema que estou tendo é que não vai enviar e-mail o arquivo. Posso obter o e-mail assim que eu sei mailx está configurado corretamente. Eu apenas não posso obtê-lo para enviar e-mail como um anexo. Ele também pode enviar e-mail a saída no corpo do e-mail.

Então, aqui está o código.

    #!/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

Eu tentei a parte mailx com:

    uuencode /tmp/folder/file-$NOWDATE.csv /tmp/folder/file-$NOWDATE.csv | mailx -s "Accounts No Credit Card Report for '$NOWDATE'" mail@gmail.com

e

    uuencode /tmp/folder/file-$NOWDATE.csv file-$NOWDATE.csv | mailx -s "Accounts No Credit Card Report for '$NOWDATE'" mail@gmail.com

Assim, o problema que eu vejo é ele cospe este erro quando eu executar o arquivo .sh.

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

Solução

NOWDATE=`date +%m-%d-%Y`

É até você, mas considere usando o formato ISO-8601, AAAA-MM-DD (%Y-%m-%d). Entre outras vantagens, ele classifica bem.

# remove the first 2 lines of the report as they are headers
sed -i '2d' /tmp/folder/file-$NOWDATE.csv

Esta não remove as duas primeiras linhas, ele apenas remove a segunda linha. Mudança '2d' para '1,2d' (mas veja abaixo).

Note que esta modifica o arquivo no lugar.

uuencode /tmp/folder/file-$NOWDATE.csv | mailx [...]

Se uuencode é dado somente um nome de arquivo, lê da entrada padrão e coloca o nome em sua saída. Seu texto seguinte, "Eu tentei a parte mailx com:" ..., indica que provavelmente você está ciente disso - mas você não tem nos mostrado o código que correções que emitir outros do que em trechos

A mensagem de erro que você está recebendo:

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

não é o que você normalmente receber se o arquivo não existe. Eu não sei o que causaria um "erro de sistema desconhecido" assim.

Mas aqui está uma alternativa que (a) é um IMHO pouco mais limpo, e (b) não requer uuencode para tentar ler o arquivo:

#!/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

Outras dicas

Se o problema é com uuencode ... porque o cant você tentar opção mailx -a que também pode anexar os arquivos para o e-mail. Marque esta ligação para mais informações.

Eu tive o mesmo problema. Um script bash executar a consulta, salvando o arquivo CSV e enviá-la. No meu caso, deu a uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error

Quando eu executado o script usando o shell ksh, funcionou perfeitamente bem sem quaisquer problemas. Como este - ksh script.sh Este é apenas mais um ponteiro. No caso uuencode dá erro, tente executá-lo usando ksh; Pode funcionar para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top