2010-04-07 6 views
48

Ho bisogno di inviare e-mail in formato html. Ho solo linea di comando linux e comando "mail".Come inviare e-mail HTML utilizzando la riga di comando di linux

Attualmente hanno usato:

echo "To: [email protected]" > /var/www/report.csv 
echo "Subject: Subject" >> /var/www/report.csv 
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv 

echo "<html>" >> /var/www/report.csv 
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv 
echo "</html>" >> /var/www/report.csv 

mail -s "Built notification" [email protected] < /var/www/report.csv 

Ma nella mia posta-agente ottengo solo plain/text.

alt text

+0

I lettori di risposte a questa domanda attenzione: ci sono diversi programmi diversi chiamati 'mail', ad esempio' cimelio-mailx' e 'BSD-mailx' su Debian Jessie . Se un comando 'mail' da una risposta qui non funziona per te, probabilmente stai usando' mail' sbagliato. Fai riferimento al gestore di pacchetti della tua distribuzione per installare il pacchetto corretto e usa il nome specifico di quel file binario (ad esempio 'bsd-mailx' su Debian) per risolvere quel problema. Maggiori dettagli su questo qui: http://heirloom.sourceforge.net/mailx_history.html –

risposta

1

si dovrebbe usare "accodare" modalità di reindirizzamento >> invece di >

+0

scusate, questo è vecchio codice. L'ho risolto –

+8

Penso che questo avrebbe dovuto essere un commento, non una risposta. –

2

Prova con:

echo "To: [email protected]" > /var/www/report.csv 
echo "Subject: Subject" >> /var/www/report.csv 
echo "MIME-Version: 1.0" >> /var/www/report.csv 
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv 
echo "Content-Disposition: inline" >> /var/www/report.csv 

echo "<html>" >> /var/www/report.csv 
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv 
echo "</html>" >> /var/www/report.csv 

mail -s "Built notification" [email protected] < /var/www/report.csv 
+0

Questo non funziona. $ lsb_release -a Distributore ID: \t Ubuntu Descrizione: \t Ubuntu 10.04.4 LTS di uscita: \t 10.04 Codename: \t lucida – lrkwz

+0

@Simone, questo non è perfettamente funzionante a causa della fine del ** MIME-Version * * e ** Content-Tye **. Devi mettere queste informazioni prima che ** Subject ** funzioni per la maggior parte del gusto unix/linux. –

5

Il problema è che quando il reindirizzamento di un file in 'posta' in quel modo, è usato solo per il corpo del messaggio. Tutte le intestazioni che inserisci nel file andranno invece nel corpo.

Prova:

mail --append="Content-type: text/html" -s "Built notification" [email protected] < /var/www/report.csv 

--append consente di aggiungere intestazioni arbitrarie alla posta, che è dove è necessario specificare il tipo di contenuto e Content-Disposition. Non è necessario incorporare le intestazioni e Subject nel file o specificarle con --append, poiché sono già implicitamente impostate sulla riga di comando (-s è l'oggetto e [email protected] diventa automaticamente il To).

+1

non hanno questa opzione sulla mia posta di comando mail: opzione non valida - a Uso: mail [-iInv] [-s soggetto] [-c cc-addr] [-b bcc-addr] to-addr .. [- sendmail-options ...] mail [-iInNv] -f [nome] mail [-iInNv] [-u utente] –

+0

Neanche io, quale versione/unix supporta questa opzione? – nylund

+0

@nylund: 'mail (GNU Mailutils 2.2)'. questo è fuori da Ubuntu 12.04, ma sarà anche nelle versioni precedenti, dato che questa risposta ha quasi 3 anni ora. –

45

questo ha funzionato per me:

echo "<b>HTML Message goes here</b>" | mail -s "$(echo -e "This is the subject\nContent-Type: text/html")" [email protected] 
+5

non funziona per me ... soluzioni più pulite sotto – ftravers

+0

hanno funzionato su OS X 10.8.4 – jobwat

+0

Direi che è un bug nell'implementazione della posta di OSX, anche se dovrebbe essere combinato con altri bug per essere sfruttabile. Sono sicuro che ci sarebbero alcuni script web in giro che non controllano correttamente i ritorni a capo in ciò che inseriscono nelle righe dell'oggetto. – mc0e

35

La mia versione di posta elettronica non ha --append e troppo intelligente per il echo -e \n -trick (sostituisce semplicemente \ n con lo spazio). Essa, tuttavia, hanno -a:

mail -a "Content-type: text/html" -s "Built notification" [email protected] < /var/www/report.html 
+0

Opere su Ubuntu 14.04.1 LTS, insieme mail a bsd-mailx – kidmose

+0

io uso in questo modo 'echo \' curl -L www.google.es \ '| mail -a "Content-type: text/html" -s "contenuto del sito web" email @ email.com "anziché" <". Per mia comodità, creo uno script/usr/local/bin per ignorare la maggior parte del comando. Io uso solo 'wmail url email' – erm3nda

16

Fai un tmp.html file chiamato e messo la riga seguente in esso:

<b>my bold message</b> 

quindi incollare tutto questo nella riga di comando: (con la parentesi e tutti).

(
    echo To: [email protected] 
    echo From: [email protected] 
    echo "Content-Type: text/html; " 
    echo Subject: a logfile 
    echo 
    cat tmp.html 
) | sendmail -t 

La posta verrà inviata. E il messaggio è apparso in grassetto anziché con i tag <b>.

Fonte:
How to send a html email with the bash command "sendmail"?

4

Su OS X (10.9.4), cat opere, ed è più facile se il vostro e-mail è già in un file:

cat email_template.html | mail -s "$(echo -e "Test\nContent-Type: text/html")" [email protected] 
+1

lavoro trovato nel server debian –

2

Con cimelio-mailx è possibile cambiare programma sendmail allo script gancio, sostituire le intestazioni lì e poi usare sendmail.

Lo script che uso (~/bin/sendmail-hook):

#!/bin/bash 

sed '1,/^$/{ 
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g 
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g 
}' | sendmail [email protected] 

Questo script modifica i valori nell'intestazione di posta nel modo seguente:

  • Content-Type: a text/html; charset=utf-8
  • Content-Transfer-Encoding: a 8bit (non so se questo è davvero necessario).

Per inviare e-mail HTML:

mail -Ssendmail='~/bin/sendmail-hook' \ 
    -s "Built notification" [email protected] < /var/www/report.csv 
+0

Per qualche motivo non riesco a farlo funzionare in una funzione, ma puoi effettivamente usarlo come un file eseguibile separato. Questo ha funzionato quando altri suggerimenti su questa pagina no. – bgStack15

+0

Non è possibile ottenere questo lavoro come funzione perché il processo di posta generata non ha accesso alle funzioni nel proprio script bash – loentar

+0

[Impossibile capire come portarlo in una chat o in un PM.] Potrei ricevere il mio comando di posta ? '. mail -Ssendmail = '~/bin/sendmail-hook' -s "Oggetto" a[email protected] bgStack15

0

ero alle prese con problemi simili (con la posta) in uno dei ganci post_receive di mio Git e alla fine ho scoperto, che sendmail in realtà funziona meglio per quel tipo di cose, soprattutto se conosci un po 'di come sono costruite le e-mail (e sembra che tu lo sappia). So che questa risposta arriva molto tardi, ma forse sarà di qualche utilità anche per gli altri. Ho fatto uso dell'operatore heredoc e uso della funzione, che espande le variabili, quindi può anche eseguire script inline. Basta controllare questo fuori (script bash):

#!/bin/bash 
recipients=(
    '[email protected]' 
    '[email protected]' 
# '[email protected]' 
); 
sender='[email protected]'; 
subject='Oh, who really cares, seriously...'; 
sendmail -t <<-MAIL 
    From: ${sender} 
    `for r in "${recipients[@]}"; do echo "To: ${r}"; done;` 
    Subject: ${subject} 
    Content-Type: text/html; charset=UTF-8 

    <html><head><meta charset="UTF-8"/></head> 
    <body><p>Ladies and gents, here comes the report!</p> 
    <pre>`mysql -u ***** -p***** -H -e "SELECT * FROM users LIMIT 20"`</pre> 
    </body></html> 
MAIL 

Nota del backticks nella parte MAIL per generare un output e ricordare, che <<- strisce operatore solo schede (non spazi) dall'inizio di linee, quindi in questo caso il copia-incolla non funzionerà (devi sostituire il rientro con le schede appropriate). Oppure utilizzare l'operatore << e non creare alcun rientro. Spero che questo aiuti qualcuno. Ovviamente è possibile utilizzare i backtick all'esterno della parte MAIL e salvare l'output in una variabile, che è possibile utilizzare successivamente nella parte MAIL: questione di gusto e leggibilità. E lo so, #!/bin/bash non funziona sempre su tutti i sistemi.

0

Ho trovato una soluzione davvero semplice: aggiungi al comando mail il modificatore -aContent-Type: text/html.

Nel tuo caso sarebbe:

mail -aContent-Type:text/html -s "Built notification" [email protected] < /var/www/report.csv 
Problemi correlati