Risposte:
Esistono diverse versioni di mail
around. Quando vai oltre mail -s subject to1@address1 to2@address2 <body
(per l'invio, sono tutte le garanzie POSIX - e persino -s
non esistevano ai vecchi tempi ), tendono ad avere diverse opzioni della riga di comando. L'aggiunta di un'intestazione aggiuntiva non è sempre facile.
Con alcune mailx
implementazioni, ad esempio da mailutils
Ubuntu o Debianbsd-mailx
, è facile, perché c'è un'opzione per questo.
mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
Con Heirloom mailx
, non c'è modo conveniente. Una possibilità per inserire intestazioni arbitrarie è quella di impostare editheaders=1
e utilizzare un editor esterno (che può essere uno script).
## Prepare a temporary script that will serve as an editor.
## This script will be passed to ed.
temp_script=$(mktemp)
cat <<'EOF' >>"$temp_script"
1a
Content-Type: text/html
.
$r test.html
w
q
EOF
## Call mailx, and tell it to invoke the editor script
EDITOR="ed -s $temp_script" heirloom-mailx -S editheaders=1 -s "Subject" to@address <<EOF
~e
.
EOF
rm -f "$temp_script"
Con un POSIXmailx
generale , non so come arrivare alle intestazioni.
Se hai intenzione di usare uno mail
o mailx
, tienilo a mente
mail
e mailx
.mail
e mailx
gestisce le linee che iniziano con ~
come comandi. Se si reindirizza il testo mail
, è necessario disporre che questo testo non contenga righe che iniziano con ~
.Se hai intenzione di installare software comunque, potresti anche installare qualcosa di più prevedibile di mail
/ Mail
/ mailx
. Ad esempio, mutt . Con Mutt, puoi fornire la maggior parte delle intestazioni nell'input con l' -H
opzione, ma nonContent-Type
, che deve essere impostata tramite un'opzione mutt.
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
Oppure puoi invocare sendmail
direttamente. Esistono diverse versioni di sendmail
là fuori, ma tutte supportano sendmail -t
l'invio di una posta nel modo più semplice, leggendo l'elenco dei destinatari dalla posta. (Penso che non tutti supportino Bcc:
.) Nella maggior parte dei sistemi, sendmail
non è nel solito $PATH
, è in /usr/sbin
o /usr/lib
.
cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: to@address
Subject: hello
Content-Type: text/html
EOF
#!/bin/sh
(
echo "To: me@example.com"
echo "Subject: hello"
echo "Content-Type: text/html"
echo
echo "<html><b><font size='7'>H</font>ello</b></html>"
echo
) | /usr/sbin/sendmail -t
Con Heirloom mailx, il modo più conveniente è
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
Grazie, amico
Testato su Fedora 17, e ha funzionato
Dovrai aggiungere l' Content-Type
intestazione alla tua e-mail per farlo accadere.
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
funzionerà
mailx
? Potrebbe avere l'opzione. Se ciò non funziona. Se ciò non funziona, puoi prendere in considerazione l'uso di mutt anche se non so a mano a che cosa passa la riga di comando per farlo.
Con heirloom-mailx puoi cambiare il programma sendmail nello script hook, sostituire lì le intestazioni e quindi usare sendmail.
Lo script che uso ( ~/bin/sendmail-mailx-hook
):
#!/bin/bash
sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@
Questo script modifica i valori nell'intestazione della posta come segue:
Content-Type:
per text/html; charset=utf-8
Content-Transfer-Encoding:
a 8bit
(non sono sicuro se questo è davvero necessario).Per inviare e-mail HTML:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
Questo metodo è più efficace di quanto proposto da @Gilles perché non crea file temporanei e corregge il flusso al volo.
Ho usato gli script seguenti per accadere
#!/bin/ksh
(
echo "To: yourmail@domain.com"
echo "Subject: Job Status"
echo "Content-Type: text/html"
echo
echo "<html>
<head>
<title>Status of the jobs during the day</title>
<style>
table, th, td {
border: 1px solid blue;
border-collapse: collapse;
}
th, td {
padding: 5px;
}
</style>
</head>
<body>
<table style='width:100%'>
<tr bgcolor='#808080'>
<th>Job Name</th>
<th>System name</th>
<th>Status</th>
</tr>
<tr>
<td>Job-1</td>
<td>Sys</td>
<td>Sucess</td>
</tr>
<tr>
<td>Job-2</td>
<td>sys</td>
<td>Failure</td>
</tr>
<tr>
<td>Job-3</td>
<td>sys</td>
<td>Sucess</td>
</tr>
</table>
</body></html>"
echo
) | /usr/sbin/sendmail -t
Per me avevo bisogno di specificare una variabile come il server SMTP, quindi il comando mail funzionava nel modo seguente. Ho cercato in molti post e ho trovato sotto la proprietà per convertire il corpo in text / html. Ora l'e-mail che ricevo è in formato HTML.
Disposizione del contenuto: in linea
Versione Unix: Red Hat Enterprise Linux Server versione 6.6 (Santiago)
Primo. Crea qualsiasi informazione sia necessaria in uno script (testSql.sh)
echo "<html><body><pre>"
mysql -u USERNAME -pPASSWORD -P PORTNUMBER -h HOSTNAME DBNAME --table -e "select columns from tablename where member in ('value1','value2')"
echo "</pre></body></html>"
Secondo. Installa lo script sul comando mail
./testSql.sh | mail -v -S smtp=smtp://IP:PORTNUMBER -s "$(echo -e "This is the subject\nContent-Type: text/ht ml\nMIME-Version: 1.0\nContent-Disposition: inline")" userid@email.com
In questo modo ottengo informazioni come di seguito nell'e-mail:
Disposizione del contenuto: inline ID messaggio: User-Agent: Heirloom mailx 12.4 29/07/08 Versione MIME: 1.0 Tipo di contenuto: text / plain; charset = us-ascii Codifica trasferimento contenuto: 7 bit Valore1 Valore2
Valore1 e Valore2 secondo la codifica HTML eseguita in testSql.sh
cat htmlfile.html | mail -s "subject" xx@example.com