2012-04-27 7 views
14

Sto usandolinux mail <file.log ha Content-Type: application/octet-stream (un allegato noname in Gmail)

mail -s "here is a log file" "[email protected]" < log/logfile.log 

che l'abitudine di venire attraverso con le intestazioni:

User-Agent: Heirloom mailx 12.4 7/29/08 
MIME-Version: 1.0 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

Ma ora i file sono più lunghe che sto ricevendo gli allegati noname perché con questo:

User-Agent: Heirloom mailx 12.4 7/29/08 
MIME-Version: 1.0 
Content-Type: application/octet-stream 
Content-Transfer-Encoding: base64 

Quindi, se tutto il resto fallisce, controllare il manuale 012....

NAME 
     mailx - send and receive Internet mail 

SYNOPSIS 
     mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] 
       [-A account] [-S variable[=value]] to-addr . . . 

Nessuna di queste opzioni sembra utile così come posso forzare Content-Type: text/plain?

risposta

11

La pagina di manuale è un buon punto di partenza! Continua a leggere fino ad arrivare alla sezione MIME TYPES, e prestare la massima attenzione quanto segue:

In caso contrario, o se il nome del file non ha alcuna estensione, i tipi di contenuto text/plain o application/octet-stream sono utilizzato, il primo per i file di testo internazionali o di testo, il secondo per tutti i file che contengono caratteri di formattazione diversi da newline e tabulatori orizzontali.

Quindi, se il messaggio contiene caratteri di formattazione "" (che in generale significa caratteri di controllo) diversi da ritorni a capo e le schede, sarà automaticamente classificato come application/octet-stream. Scommetto che se osservi da vicino i dati troverai alcuni personaggi di controllo che fluttuano intorno.

È possibile aggirare il problema ...

  • Compreso il file di log come allegato (usando -a) al posto del corpo del messaggio principale, e impostare il file ~/.mime.types per identificare *.log i file come testo/pianura.
  • Filtra i caratteri di controllo utilizzando qualcosa come tr.
  • Utilizzare un altro MUA come mutt per inviare la posta. In realtà, si può solo mestiere un messaggio te stesso e inviarlo direttamente a sendmail:

    (
        echo To: [email protected] 
        echo From: [email protected] 
        echo Subject: a logfile 
        echo 
        cat logfile.log 
    ) | sendmail -t 
    
+0

tr -cd '\ 11 \ 12 \ 15 \ 40- \ 176 ' KCD

+0

Avevo notato quel commento sui tipi di mime. Grazie per i vostri soluzioni alternative, ognuna delle quali funzionerebbe benissimo – KCD

+0

Grazie. Usare mutt è la soluzione più semplice. –

2

Nel mio caso, lo script è stato chiamato da cron dove LC_ * non è stato definito e gli accenti sono stati interpretati come "controllo caratteri". Ho appena inserito le seguenti linee all'inizio del mio file crontab:

LC_NAME=fr_FR.UTF-8 
LC_ALL=fr_FR.UTF-8 
+0

Oppure 'en_US.UTF-8' –

3

Ho avuto qualche problema di ottenere i miei script e-mail automatica da eseguire dopo aver cambiato per Ubuntu Precise 12.04. Non lo so, quando Ubuntu (o Debian) si scambiavano bsd-mailx contro heirloom-mailx, ma i due comandi "mail" si comportano in modo molto diverso. (Ad esempio cimelio utilizza -a per gli allegati, mentre è usato per intestazioni aggiuntive in bsd.) Nel mio caso, cimelio-mailx non è stato in grado di determinare in modo affidabile il tipo Mime e ha continuato a inviare il testo come allegati. Datemi la colpa di non estirpare i caratteri di controllo o qualsiasi altra cosa, ma non vedo molto nel cambiare gli script che hanno fatto il loro lavoro perfettamente prima dell'aggiornamento. Quindi se si preferisce impostare Mimetype da soli, bsd-mailx è una soluzione migliore.

sudo apt-get install bsd-mailx 
sudo apt-get remove heirloom-mailx 

Risolto per me.

+0

+1 per menzionare [cimelio] (http://heirloom.sourceforge.net/mailx/mailx.1.html). Su un sistema Linux senza 'man' ho avuto difficoltà a scoprire quale' mailx' è stato usato, come 'mailx -V' ha appena stampato la versione, non il nome o il tipo di esso. – Qtax

8

ho avuto il problema simile di recente e, infine, finiscono con una soluzione che è più breve:

cat -v log/logfile.log | mail -s "here is a log file" "[email protected]" 

Maggiori dettagli del discussion of cat with mailx.

+0

L'opzione -v di cat è stata davvero utile poiché ho potuto comprendere il motivo per cui ho avuto problemi a ricevere il corpo della mia posta come allegato. Grazie. – MadJlzz

3

Sui sistemi RedHat (SL, CentOS, Fedora, ecc), si vuole installare bsd-mailx e quindi impostare/etc/alternatives/mail in modo appropriato:

sudo yum -y install bsd-mailx 
sudo alternatives --set mail /usr/bin/bsd-mailx 

Naturalmente, si rischia rompere le applicazioni che si basano sul comportamento heirloom-mailx ma non chiamano esplicitamente 'mailx' invece di 'mail'.

Per visualizzare le informazioni su/bin/mail attualmente punta a:

sudo alternatives --display mail 

Per verificare la presenza di vari pacchetti installati mailx:

sudo rpm -qa *mailx 
Problemi correlati