style mail attribute html linux email mailx

mail - html title attribute style



Mailx enviar mensaje html (6)

Quiero enviar un mensaje html con Mailx. Cuando intento el siguiente comando

mailx -s "Subject" [email protected] < email.html

Obtengo el contenido de email.html en texto plano. En el mensaje, el encabezado Content-Type se establece en text / plain. La opción -a intenta enviar un archivo, así que no descubrí cómo modificar el encabezado. Esta answer casi funcionó, establece bien el Tipo de contenido en texto / html pero no sustituye al Tipo de contenido predeterminado que es texto / sin formato.

mailx -s "$(echo -e "This is the subject/nContent-Type: text/html")" [email protected] < email.html

da este resultado:

From: [email protected] To: [email protected] Subject: This is the subject Content-Type: text/html Message-ID: <538d7b66.Xs0x9HsxnJKUFWuI%[email protected]> User-Agent: Heirloom mailx 12.4 7/29/08 MIME-Version: 1.0 boundary="=_538d7b66.z5gaIQnlwb1f/AOkuuC+GwF1evCaG/XIHQMbMMxbY6satTjK" This is a multi-part message in MIME format. --=_538d7b66.z5gaIQnlwb1f/AOkuuC+GwF1evCaG/XIHQMbMMxbY6satTjK Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline <html> <body> <p>Helo wolrd</p> </body> </html>

PD: También lo intenté con uuencode. Cuando intento mostrar el mensaje en el correo web, aparece una página en blanco ...


Bueno, el correo "-a" y mailx en Centos7 es "adjuntar archivo" no "añadir encabezado". Mi camino más corto hacia una solución en Centos7 desde aquí: stackexchange.com

Básicamente:

yum install mutt mutt -e ''set content_type=text/html'' -s ''My subject'' [email protected] < msg.html


Es fácil, si su comando mailx admite la opción -a (agregar encabezado):

$ mailx -a ''Content-Type: text/html'' -s "my subject" [email protected] < email.html

Si no es así, intente usar sendmail :

# create a header file $ cat mailheader To: [email protected] Subject: my subject Content-Type: text/html # send $ cat mailheader email.html | sendmail -t


Hay muchas versiones diferentes de correo alrededor. Cuando va más allá del correo, tema a 1 @ dirección1 a 2 @ dirección2

  • Con algunas implementaciones de mailx, por ejemplo, desde mailutils en Ubuntu o bsd-mailx de Debian, es fácil, porque hay una opción para eso.

    mailx -a ''Content-Type: text/html'' -s "Subject" to@address <test.html

  • Con el mailx de Heirloom, no hay una forma 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 mailx POSIX general, no sé cómo llegar a los encabezados.

Si va a utilizar cualquier correo o mailx, tenga en cuenta que

  • Esto no es portátil incluso dentro de una distribución de Linux dada. Por ejemplo, tanto Ubuntu como Debian tienen varias alternativas para mail y mailx.

  • Al redactar un mensaje, mail y mailx trata las líneas que comienzan con ~ como comandos. Si canaliza texto en el correo, debe organizar que este texto no contenga líneas que comiencen con ~.

Si va a instalar el 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 opción -H, pero no con Content-Type, que debe configurarse a través de una opción mutt.

mutt -e ''set content_type=text/html'' -s ''hello'' ''to@address'' <test.html

O puedes invocar sendmail directamente. Existen varias versiones de sendmail, pero todas son compatibles con sendmail -t para enviar un correo de la manera más simple, leyendo la lista de destinatarios del correo. (Creo que no todos admiten Bcc :.) En la mayoría de los sistemas, sendmail no está en el 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


Si usa AIX, intente esto. Esto adjuntará un archivo de texto e incluirá un cuerpo HTML. Si esto no funciona, capture el resultado en / var / spool / mqueue

#!/usr/bin/kWh if (( $# < 1 )) then echo "/n/tSyntax: $(basename) MAILTO SUBJECT BODY.html ATTACH.txt " echo "/tmailzatt" exit fi export MAILTO=${[email protected]} MAILFROM=$(whoami) SUBJECT=${2-"mailzatt"} export BODY=${3-/apps/bin/attch.txt} export ATTACH=${4-/apps/bin/attch.txt} export HST=$(hostname) #export BODY="/wrk/stocksum/report.html" #export ATTACH="/wrk/stocksum/Report.txt" #export MAILPART=`uuidgen` ## Generates Unique ID #export MAILPART_BODY=`uuidgen` ## Generates Unique ID export MAILPART="==".$(date +%d%S)."===" ## Generates Unique ID export MAILPART_BODY="==".$(date +%d%Sbody)."===" ## Generates Unique ID ( echo "To: $MAILTO" echo "From: mailmate@$HST " echo "Subject: $SUBJECT" echo "MIME-Version: 1.0" echo "Content-Type: multipart/mixed; boundary=/"$MAILPART/"" echo "" echo "--$MAILPART" echo "Content-Type: multipart/alternative; boundary=/"$MAILPART_BODY/"" echo "" echo "" echo "--$MAILPART_BODY" echo "Content-Type: text/html" echo "Content-Disposition: inline" cat $BODY echo "" echo "--$MAILPART_BODY--" echo "" echo "--$MAILPART" echo "Content-Type: text/plain" echo "Content-Disposition: attachment; filename=/"$(basename $ATTACH)/"" echo "" cat $ATTACH echo "" echo "--${MAILPART}--" ) | /usr/sbin/sendmail -t


Usé con éxito lo siguiente en Arch Linux (donde se usa la bandera -a para adjuntos) durante varios años:

mailx -s "The Subject $( echo -e "/nContent-Type: text/html" [email protected] < email.html

Esto adjuntó el encabezado Content-Type al encabezado del asunto, que funcionó muy bien hasta una actualización reciente. Ahora la nueva línea se filtra fuera del tema -s . Presumiblemente, esto se hizo para mejorar la seguridad.

En lugar de confiar en hackear la línea de asunto, ahora uso una subshell de bash:

( echo -e "Content-Type: text/html/n" cat mail.html ) | mail -s "The Subject" -t [email protected]

Y como en realidad solo estamos usando la bandera de asunto de mailx , parece que no hay razón para no cambiar a sendmail como lo sugiere @dogbane:

( echo "To: [email protected]" echo "Subject: The Subject" echo "Content-Type: text/html" echo cat mail.html ) | sendmail -t

El uso de subshells de bash evita tener que crear un archivo temporal.