mail -s "subject" [email protected] <test.html
funciona, pero solo para correo electrónico de texto sin formato.
¿Cuál es la forma correcta de enviar un correo electrónico HTML usando el comando de Linux mail
? ?
Respuesta aceptada:
Hay muchas versiones diferentes de mail
alrededor. Cuando va más allá de mail -s subject [email protected] [email protected] <body
(para enviar, eso es todo lo que garantiza POSIX, e incluso -s
no existía en los viejos tiempos), tienden a tener diferentes opciones de línea de comandos. Agregar un encabezado adicional no siempre es fácil.
-
Con algo de
mailx
implementaciones, p. demailutils
en Ubuntu o Debianbsd-mailx
, es fácil, porque hay una opción para eso.mailx -a 'Content-Type: text/html' -s "Subject" [email protected] <test.html
-
Con la herencia
mailx
, no hay manera conveniente. Una posibilidad de insertar encabezados arbitrarios es establecereditheaders=1
y use 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" [email protected] <<EOF ~e . EOF rm -f "$temp_script"
-
Con un POSIX general
mailx
, no sé cómo acceder a los encabezados.
Si vas a utilizar cualquier mail
o mailx
, ten en cuenta que
- Esto no es portátil ni siquiera dentro de una determinada distribución de Linux. Por ejemplo, tanto Ubuntu como Debian tienen varias alternativas para
mail
ymailx
. - Al redactar un mensaje,
mail
ymailx
trata líneas que comienzan con~
como comandos. Si canalizas texto amail
, debe hacer arreglos para que este texto no contenga líneas que comiencen con~
.
Si va a instalar software de todos modos, también podría instalar algo más predecible que mail
/Mail
/mailx
. Por ejemplo, mut. Con Mutt, puede proporcionar la mayoría de los encabezados en la entrada con -H
opción, pero no Content-Type
, que debe configurarse a través de una opción mutt.
mutt -e 'set content_type=text/html' -s 'hello' '[email protected]' <test.html
O puede invocar sendmail
directamente. Hay varias versiones de sendmail
por ahí, pero todos admiten sendmail -t
para enviar un correo de la forma más sencilla, leyendo la lista de destinatarios del correo. (Creo que no todos son compatibles con Bcc:
.) En la mayoría de los sistemas, sendmail
no está en el $PATH
habitual , está en /usr/sbin
o /usr/lib
.
cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: [email protected]
Subject: hello
Content-Type: text/html
EOF