Respuestas:
Hay muchas versiones diferentes de mail
alrededor. Cuando va más allá mail -s subject to1@address1 to2@address2 <body
(para enviar, eso es todas las garantías POSIX , e incluso -s
no existía en los viejos tiempos ), tienden a tener diferentes opciones de línea de comando. Agregar un encabezado adicional no siempre es fácil.
Con algunas mailx
implementaciones, por ejemplo, a partir mailutils
de Ubuntu o Debianbsd-mailx
, es fácil, porque hay una opción para eso.
mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
Con la herencia mailx
, no hay una manera conveniente. Una posibilidad para insertar encabezados arbitrarios es establecer editheaders=1
y usar un editor externo (que puede ser un 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
general , no sé cómo llegar a los encabezados.
Si vas a usar cualquiera mail
o mailx
, ten en cuenta que
mail
y mailx
.mail
y mailx
trata las líneas que comienzan con ~
como comandos. Si canaliza texto mail
, debe organizar que este texto no contenga líneas que comiencen por ~
.Si va a instalar software de todos modos, también podría instalar algo más predecible que mail
/ Mail
/ mailx
. Por ejemplo, mutt . Con Mutt, puede suministrar la mayoría de los encabezados en la entrada con la -H
opción, pero noContent-Type
, que debe configurarse mediante una opción de mutt.
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
O puede invocar sendmail
directamente. Existen varias versiones de sendmail
por ahí, pero todas admiten sendmail -t
enviar un correo de la manera más simple, leyendo la lista de destinatarios del correo. (Creo que no todos son compatibles Bcc:
). En la mayoría de los sistemas, sendmail
no está en lo habitual $PATH
, está en /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, la forma conveniente es
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
Gracias, Amigo
Probado en Fedora 17, y trabajó
Deberá agregar un Content-Type
encabezado a su correo electrónico para que esto suceda.
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
trabajará
mailx
? Eso podría tener la opción. Si eso no funciona. Si eso no funciona, puede considerar usar mutt, aunque no sé de antemano cuáles son los cambios de la línea de comando para hacerlo.
Con heirloom-mailx puede cambiar el programa sendmail a su script de enlace, reemplazar los encabezados allí y luego usar sendmail.
El script que 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 $@
Este script cambia los valores en el encabezado del correo de la siguiente manera:
Content-Type:
a text/html; charset=utf-8
Content-Transfer-Encoding:
a 8bit
(no estoy seguro si esto es realmente necesario).Para enviar un correo electrónico HTML:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
Este método es más efectivo que el propuesto por @Gilles porque no crea archivos temporales y simplemente arregla la transmisión sobre la marcha.
He utilizado los siguientes scripts para suceder
#!/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
Para mí, necesitaba especificar una variable como el servidor SMTP, por lo que el comando de correo funcionó de la siguiente manera. Busqué en muchas publicaciones y encontré la propiedad a continuación para convertir el cuerpo en texto / html. Ahora el correo electrónico que recibo está en formato HTML.
Disposición de contenido: en línea
Versión Unix: Red Hat Enterprise Linux Server versión 6.6 (Santiago)
Primero. Cree la información necesaria en un 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>"
Segundo. Canalice esa secuencia de comandos al comando de correo
./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
Al hacer esto, obtengo la información que se muestra a continuación en el correo electrónico:
Disposición del contenido: en línea ID del mensaje: Agente de usuario: Heirloom mailx 12.4 29/7/08 Versión MIME: 1.0 Tipo de contenido: texto / sin formato; charset = us-ascii Content-Transfer-Encoding: 7bit Valor1 Valor2
Value1 y Value2 según el etiquetado HTML realizado en testSql.sh
cat htmlfile.html | mail -s "subject" xx@example.com