Bash Script usando mailx para anexo de correio
-
27-10-2019 - |
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
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ê.