mail html linux email bash sendmail

linux mail html



EnvĂ­o de correo HTML con un script de shell (11)

Además de la respuesta correcta por mdma, también puede usar el comando de correo de la siguiente manera:

mail [email protected] -s"Subject Here" -a"Content-Type: text/html; charset=/"us-ascii/""

Obtendrás lo que estás buscando. No olvides poner "" y "" en el correo electrónico. Aquí hay un script rápido que uso para enviar un informe diario en HTML:

#!/bin/sh (cat /path/to/tomorrow.txt mysql -h mysqlserver -u user -pPassword Database -H -e "select statement;" echo "</HTML>") | mail [email protected] -s"Tomorrow''s orders as of now" -a"Content-Type: text/html; charset=/"us-ascii/""

¿Cómo puedo enviar un correo electrónico HTML usando un script de shell?


El encabezado MIME y desde, a la dirección también se pueden incluir en el archivo html.

Mando

cat cpu_alert.html | /usr/lib/sendmail -t

Ejemplo de archivo cpu_alert.html.

From: [email protected] To: [email protected] Subject: CPU utilization heigh Mime-Version: 1.0 Content-Type: text/html <h1>Mail body will be here</h1> The mail body should start after one blank line from the header.

Código de muestra disponible aquí: http://sugunan.net/git/slides/shell/cpu.php


Hasta ahora he encontrado dos maneras rápidas en cmd linux

  1. Utilice el correo de la escuela anterior

mail -s "$(echo -e "This is Subject/nContent-Type: text/html")" [email protected] < mytest.html

  1. Usar mutt

mutt -e "my_hdr Content-Type: text/html" [email protected] -s "subject" < mytest.html


Heres mío (dado que "mail" está configurado correctamente):

scanuser @ owncloud: ~ $ vi sendMailAboutNewDocuments.sh

mail -s "You have new mail" -a "Content-type: text/html" -a "From: [email protected]" $1 << EOF <html> <body> Neues Dokument: $2<br> <a href="https://xxx/index.php/apps/files/?dir=/Post">Hier anschauen</a> </body> </html> EOF

para hacer ejecutable:

chmod +x sendMailAboutNewDocuments.sh

luego llame:

./sendMailAboutNewDocuments.sh [email protected] test.doc


Las etiquetas incluyen ''sendmail'', así que aquí hay una solución que usa eso:

( echo "From: [email protected] " echo "To: [email protected] " echo "MIME-Version: 1.0" echo "Content-Type: multipart/alternative; " echo '' boundary="some.unique.value.ABC123/server.xyz.com"'' echo "Subject: Test HTML e-mail." echo "" echo "This is a MIME-encapsulated message" echo "" echo "--some.unique.value.ABC123/server.xyz.com" echo "Content-Type: text/html" echo "" echo "<html> <head> <title>HTML E-mail</title> </head> <body> <a href=''http://www.google.com''>Click Here</a> </body> </html>" echo "------some.unique.value.ABC123/server.xyz.com--" ) | sendmail -t

Un contenedor para sendmail puede facilitar este trabajo, por ejemplo, mutt :

mutt -e ''set content_type="text/html"'' [email protected] -s "subject" < message.html



Otra opción es usar msmtp.

Lo que necesita es configurar su .msmtprc con algo como esto (por ejemplo, usar gmail):

account default host smtp.gmail.com port 587 from [email protected] tls on tls_starttls on tls_trust_file ~/.certs/equifax.pem auth on user [email protected] password <password> logfile ~/.msmtp.log

Entonces solo llame:

(echo "Subject: <subject>"; echo; echo "<message>") | msmtp <[email protected]>

en tu script

Actualización: para el correo HTML, también debe colocar los encabezados, por lo que es posible que desee crear un archivo como este:

From: [email protected] To: [email protected] Subject: Important message Mime-Version: 1.0 Content-Type: text/html <h1>Mail body will be here</h1> The mail body <b>should</b> start after one blank line from the header.

Y enviarlo por correo como

cat email-template | msmtp [email protected]

Lo mismo se puede hacer a través de la línea de comandos, pero puede ser más fácil usar un archivo.


Primero debes redactar el mensaje. El mínimo básico se compone de estos dos encabezados:

MIME-Version: 1.0 Content-Type: text/html

... y el cuerpo del mensaje apropiado:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head><title></title> </head> <body> <p>Hello, world!</p> </body> </html>

Una vez que lo tenga, puede pasar la información apropiada al comando de mail :

body = ''...'' echo $body | mail / -a "From: [email protected]" / -a "MIME-Version: 1.0" / -a "Content-Type: text/html" / -s "This is the subject" / [email protected]

Este es un ejemplo simplificado, ya que también debes ocuparte de los conjuntos de caracteres, las codificaciones, la longitud máxima de línea ... Pero esta es básicamente la idea.

Alternativamente, puede escribir su secuencia de comandos en Perl o PHP en lugar de simple shell.

Actualizar

Un script de shell es básicamente un archivo de texto con terminaciones de línea Unix que comienza con una línea llamada shebang que le dice al intérprete a qué intérprete debe pasar el archivo, sigue algunos comandos en el idioma que entiende el intérprete y tiene permiso de ejecución (en Unix eso es atributo de archivo). Por ejemplo, supongamos que guardas lo siguiente como hello-world :

#!/bin/sh echo Hello, world!

Luego le asigna permiso de ejecución:

chmod +x hello-world

Y finalmente puedes ejecutarlo:

./hello-world

Como sea, esto no tiene nada que ver con la pregunta original. Debe familiarizarse con las secuencias de comandos de shell básicas antes de realizar tareas avanzadas con ella. Aquí hay un par de enlaces sobre bash , un shell popular:

http://www.gnu.org/software/bash/manual/html_node/index.html

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html


Utilizando el mailx predeterminado de CentOS 7 (aparece como heirloom-mailx), simplifiqué esto simplemente usando un archivo de texto con los encabezados necesarios y un límite estático para la configuración multipart / mixed y multipart / alternative.

Estoy seguro de que puede averiguar multiparte / relacionado si lo desea con la misma configuración.

test.txt:

--000000000000f3b2150570186a0e Content-Type: multipart/alternative; boundary="000000000000f3b2130570186a0c" --000000000000f3b2130570186a0c Content-Type: text/plain; charset="UTF-8" This is my plain text stuff here, in case the email client does not support HTML or is blocking it purposely My Link Here <http://www.example.com> --000000000000f3b2130570186a0c Content-Type: text/html; charset="UTF-8" <div dir="ltr"> <div>This is my HTML version of the email</div> <div><br></div> <div><a href="http://www.example.com">My Link Here</a><br></div> </div> --000000000000f3b2130570186a0c-- --000000000000f3b2150570186a0e Content-Type: text/csv; charset="US-ASCII"; name="test.csv" Content-Disposition: attachment; filename="test.csv" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jj5qmzqz0

Los límites definen segmentos de varias partes.

La ID de límite que no tiene guiones al final es un punto de inicio de un segmento.

El que tiene dos guiones al final es el punto final.

En este ejemplo, hay una subparte dentro de la sección principal multiparte / mixta, para multiparte / alternativa.

El método multiparte / alternativo básicamente dice "Detrás de esto, SI la parte de prioridad no tiene éxito" - en este ejemplo, los clientes de correo electrónico suelen tomar como prioridad el HTML. Si un cliente de correo electrónico no muestra el HTML, vuelve al texto sin formato.

El método multiparte / mixto que encapsula todo este mensaje, básicamente dice que hay contenido diferente aquí, que muestra ambos.

En este ejemplo, coloqué un archivo adjunto CSV en el correo electrónico. Verás que el archivo adjunto se conecta utilizando base64 en el siguiente comando.

Lancé el archivo adjunto como ejemplo, tendrá que establecer su tipo de contenido de manera adecuada para su archivo adjunto y especificar si está en línea o no.

La identificación X-Attachment-Id es necesaria para algunos proveedores, aleatorice la ID que establezca.

El comando para enviar esto es:

echo -e "`cat test.txt; openssl base64 -e < test.csv`/n--000000000000f3b2150570186a0e--/n" | mailx -s "Test 2 $( echo -e "/nContent-Type: multipart/mixed; boundary=/"000000000000f3b2150570186a0e/"" )" -r [email protected] [email protected]

Como puede ver en la línea Asunto de mailx, inserto el límite de varias partes estáticamente, este es el primer encabezado que verá el cliente de correo electrónico.

Luego viene el contenido de test.txt que se descarga.

En cuanto al archivo adjunto, uso openssl (que es bastante estándar en los sistemas) para convertir el archivo adjunto a base64.

Además, agregué la declaración de cierre de límite al final de este eco, para indicar el final del mensaje.

Esto funciona alrededor de los problemas de herencia-correox y prácticamente no tiene script.

El eco puede ser un feed en su lugar, o cualquier otro número de métodos.



cat > mail.txt <<EOL To: <email> Subject: <subject> Content-Type: text/html <html> $(cat <report-table-*.html>) This report in <a href="<url>">SVN</a> </html> EOL

Y entonces:

sendmail -t < mail.txt