2010-04-07 19 views
48

Necesito enviar un correo electrónico con formato html. Solo tengo la línea de comando de Linux y comando "correo".Cómo enviar correos electrónicos HTML usando la línea de comandos de linux

Actualmente se han utilizado:

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 

Pero en mi correo-agente i obtener sólo llanura/texto.

alt text

+0

Los lectores de respuestas a esta pregunta tenga cuidado: hay varios programas diferentes llamados 'mail', por ejemplo' herencia-mailx' y 'BSD-mailx' en Debian Jessie . Si un comando 'mail' de una respuesta aquí no funciona para usted, probablemente esté utilizando el' correo' incorrecto. Consulte el administrador de paquetes de su distribución para instalar el paquete correcto y use el nombre específico de ese binario (por ejemplo, 'bsd-mailx' en Debian) para resolver ese problema. Más detalles sobre esto aquí: http://heirloom.sourceforge.net/mailx_history.html –

Respuesta

1

debe usar "añadir" el modo de redirección >> en lugar de >

+0

lo siento, este es el código antiguo. Lo he arreglado –

+8

Creo que esto debería haber sido un comentario, no una respuesta. –

2

Pruebe 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

Esto no funciona. $ lsb_release -a ID Distribuidor: \t Ubuntu Descripción: \t Ubuntu 10.04.4 LTS lanzamiento: \t 10,04 Codename: \t lúcida – lrkwz

+0

@Simone, esto no está funcionando perfectamente, debido a fin de ** MIME-Version * * y ** Content-Tye **. Es necesario que coloque esta información antes de que ** Subject ** funcione para la mayor parte del sabor de Unix/Linux. –

5

El problema es que al redirigir un archivo en 'mail' de esa manera, se usa solo para el cuerpo del mensaje. Cualquier encabezado que insertes en el archivo irá al cuerpo en su lugar.

Probar:

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

--append le permite agregar encabezados arbitrarios para el correo, que es donde se debe especificar el tipo de contenido y el contenido-disposición. No es necesario incrustar los encabezados To y Subject en su archivo, ni especificarlos con --append, ya que los está configurando implícitamente en la línea de comando ya (-s es el asunto, y [email protected] se convierte automáticamente en el To).

+1

no tengo esa opción en mi correo postal de comando: opción no válida - un Uso: correo [-iInv] [-s tema] [-c cc-addr] [-b bcc-addr] to-addr .. . [- sendmail-options ...] correo [-iInNv] -f [nombre] correo [-iInNv] [-u usuario] –

+0

Yo tampoco, ¿qué versión/unix admite esta opción? – nylund

+0

@nylund: 'mail (GNU Mailutils 2.2)'. esto está fuera de ubuntu 12.04, pero también estará en versiones anteriores, dado que esta respuesta ya tiene casi 3 años. –

45

Esto funcionó para mí:

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

no funciona para mí ... soluciones de limpieza por debajo de – ftravers

+0

trabajadas en OS X 10.8.4 – jobwat

+0

Diría que es un error en la implementación del correo de OSX, aunque tendría que combinarse con otros errores para ser explotables. Estoy seguro de que habrá algunos scripts web que no comprueban correctamente los retornos de carro en lo que insertan en las líneas de asunto. – mc0e

35

Mi versión de correo electrónico no tiene --append y demasiado inteligente para la echo -e \n -trick (simplemente reemplaza \ n con el espacio). Lo hace, sin embargo, tiene -a:

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

Obras en Ubuntu 14.04.1 LTS, sistema electrónico de BSD-mailx – kidmose

+0

utilizo de esta manera 'echo \' curl -L www.google.es \ '| mail -a "Content-type: text/html" -s "contenido del sitio web" email @ email.com' en lugar de '<'. Para mi comodidad, creo un script/usr/local/bin para eludir la mayor parte del comando. Solo uso el correo electrónico 'wmail url' – erm3nda

16

hacer un archivo llamado tmp.html y poner la siguiente línea en él:

<b>my bold message</b> 

continuación, pegar todo esto en la línea de comandos: (con el paréntesis y todas).

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

El correo será enviado. Y el mensaje apareció en negrita en lugar de con las etiquetas <b>.

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

4

En OS X (10.9.4), cat obras, y es más fácil si su correo electrónico ya está en un archivo:

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

trabajo find en el servidor Debian –

2

Con herencia-mailx le puede cambiar el programa Sendmail a su script gancho, sustituir las cabeceras allí y luego utilizar Sendmail.

El script que utilizo (~/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] 

Este script cambia los valores en la cabecera 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 correo electrónico HTML:

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

Por alguna razón no puedo hacer que esto funcione en una función, pero puedes usar esto como un archivo ejecutable aparte. Esto funcionó cuando otras sugerencias en esta página no lo hicieron. – bgStack15

+0

No puede obtener este trabajo como una función porque el proceso del correo engendrado no tiene acceso a las funciones en su secuencia de comandos bash – loentar

+0

[No se puede saber cómo llevar esto a un chat o PM.] ¿Puedo obtener mi comando de correo? ? '. mail -Ssendmail = '~/bin/sendmail-hook' -s "Asunto" [email protected] bgStack15

0

yo estaba luchando con un problema similar (con el correo) en uno de los ganchos post_receive de mi git y finalmente me enteré, que sendmail realmente funciona mejor para ese tipo de cosas, especialmente si conoce un poco cómo se construyen los correos electrónicos (y parece que usted sabe). Sé que esta respuesta llega muy tarde, pero tal vez también sea útil para otros. Hice uso del operador heredoc y el uso de la función, que expande las variables, por lo que también puede ejecutar scripts en línea. Sólo mira esto (escritura del golpe):

#!/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 de acentos abiertos en la parte CORREO para generar alguna salida y recordar, que <<- tiras operador sólo Tabs (no espacios) desde el principio de las líneas, por lo que en ese caso copiar y pegar no funcionará (debe reemplazar la sangría con pestañas correctas). O use el operador << y no haga ninguna sangría en absoluto. Espero que esto ayude a alguien. Por supuesto, puede usar los trazos atrás fuera de la parte CORREO y guardar la salida en alguna variable, que luego puede usar en la parte CORREO, cuestión de gusto y legibilidad. Y sé que #!/bin/bash no siempre funciona en todos los sistemas.

0

Encontré una solución realmente fácil: agregue al comando de correo el modificador -aContent-Type: text/html.

En su caso sería:

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