Bash Script utilizzando mailx in allegato di posta
-
27-10-2019 - |
Domanda
Ho uno script bash che esegue una query in postgres, viene restituito a csv.Voglio aggiungere a quello script per utilizzare mailx per inviare tramite e-mail quel file .csv a una particolare e-mail.
Il problema che sto riscontrando è che non invierà il file tramite posta elettronica.Posso ricevere l'email così so che mailx è impostato correttamente.Non riesco a convincerlo a inviarlo tramite posta elettronica come allegato.Può anche inviare tramite e-mail l'output nel corpo dell'e-mail.
Quindi ecco il codice.
#!/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
Ho provato la parte mailx con:
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
Quindi il problema che ho è che sputa questo errore quando eseguo il file .sh.
uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error
Soluzione
NOWDATE=`date +%m-%d-%Y`
Dipende da te, ma valuta l'utilizzo del formato ISO-8601, AAAA-MM-GG (%Y-%m-%d
). Tra gli altri vantaggi, si ordina bene.
# remove the first 2 lines of the report as they are headers
sed -i '2d' /tmp/folder/file-$NOWDATE.csv
Questo non rimuove le prime due righe, rimuove solo la seconda riga. Cambia '2d'
in '1,2d'
(ma vedi sotto).
Nota che questo modifica il file in posizione.
uuencode /tmp/folder/file-$NOWDATE.csv | mailx [...]
Se a uuencode
viene assegnato un solo nome di file, legge dallo standard input e inserisce il nome nel suo output. Il tuo testo seguente, "Ho provato la parte mailx con:" ..., indica che probabilmente ne sei a conoscenza, ma non ci hai mostrato il codice che risolve il problema oltre che nei frammenti.
Il messaggio di errore che stai ricevendo:
uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error
non è quello che otterresti normalmente se il file non esiste. Non so cosa causerebbe un "Errore di sistema sconosciuto" come quello.
Ma ecco un'alternativa che (a) è un po 'più pulita IMHO e (b) non richiede uuencode
per tentare di leggere il file:
#!/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
Altri suggerimenti
Se il problema è con uuencode ... perché non puoi provare l'opzione mailx -a che può anche allegare i file alla posta. Controlla questo link per maggiori informazioni.
Ho avuto lo stesso problema.Uno script bash che esegue la query, salva il file csv e lo invia per posta.Nel mio caso ha dato il uuencode: fopen-ing /tmp/folder/file-01-11-2011.csv: Unknown system error
Quando ho eseguito lo script utilizzando la shell ksh, ha funzionato perfettamente senza problemi.In questo modo - ksh script.sh
Questo è solo un altro puntatore.Nel caso in cui uuencode dia un errore, prova a eseguirlo usando ksh;potrebbe funzionare per te.