Domanda

Devo allegare un file con mailx ma al momento non ci riesco.

Ecco il mio codice:

subject="Something happened"
to="somebody@somewhere.com"
body="Attachment Test"
attachment=/path/to/somefile.csv

uuencode $attachment | mailx -s "$subject" "$to" << EOF

The message is ready to be sent with the following file or link attachments:

somefile.csv

Note: To protect against computer viruses, e-mail programs may prevent
sending or receiving certain types of file attachments.  Check your
e-mail security settings to determine how attachments are handled.

EOF

Qualsiasi feedback sarebbe molto apprezzato.


AggiornamentoHo aggiunto l'allegato var per evitare di dover utilizzare il percorso ogni volta.

È stato utile?

Soluzione

Devi concatenare sia il testo del tuo messaggio che l'allegato uuencoded:

$ subject="Something happened"
$ to="somebody@somewhere.com"
$ body="Attachment Test"
$ attachment=/path/to/somefile.csv
$
$ cat >msg.txt <<EOF
> The message is ready to be sent with the following file or link attachments:
>
> somefile.csv
>
> Note: To protect against computer viruses, e-mail programs may prevent
> sending or receiving certain types of file attachments.  Check your
> e-mail security settings to determine how attachments are handled.
>
> EOF
$ ( cat msg.txt ; uuencode $attachment somefile.csv) | mailx -s "$subject" "$to"

Esistono diversi modi per fornire il testo del messaggio, questo è solo un esempio vicino alla tua domanda originale.Se il messaggio deve essere riutilizzato, ha senso semplicemente memorizzarlo in un file e utilizzare questo file.

Altri suggerimenti

Bene, ecco i primi problemi che hai.

  1. Sembra che tu presuma che un client di posta gestirà l'allegato uuencoded senza intestazioni.Ciò non accadrà.

  2. Stai utilizzando in modo improprio il reindirizzamento I/O:L'output di uuencode e l'here-document vengono entrambi inviati a mailx, cosa che non può accadere.

  3. Stai utilizzando in modo improprio uuencode:se viene fornito un percorso, è solo un nome da dare al file decodificato, non un nome di file di input.Dando il file due volte si assegnerà al file decodificato lo stesso nome di quello letto.Il flag -m impone la codifica base64.Ma questo non fornirà ancora intestazioni degli allegati per mailx.

Faresti meglio a procurarti una copia di mpack, che farà quello che vuoi.

Se devi farlo, potresti fare qualcosa del genere:

cat <<EOF | ( cat -; uuencode -m /path/to/somefile.csv /path/to/somefile.csv; ) | mailx -s "$subject" "$to" 
place your message from the here block in your example here
EOF

Ci sono tantissime altre possibilità...Ma questo ha ancora il documento qui come nel tuo esempio ed è stato facile dalla parte superiore della mia testa e non c'è un file di temperatura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top