2011-03-01 14 views
87

Quiero enviar un correo electrónico de una secuencia de comandos shell de Linux. ¿Cuál es el comando estándar para hacer esto y necesito configurar cualquier nombre de servidor especial?enviando un correo desde una secuencia de comandos shell de Linux

+7

Intente preguntar en Superuser [http://superuser.com/] o, mejor aún, Unix y Linux SE [http://unix.stackexchange.com/]. –

+2

Posible duplicado de [script de Shell para enviar correo electrónico] (http://stackoverflow.com/questions/4658283/shell-script-to-send-email) –

Respuesta

95

Si el servidor está bien configurado, por ejemplo, que tiene un MTA en funcionamiento, sólo puede utilizar el comando electrónico.

Por ejemplo, para enviar el contenido de un archivo, se puede hacer esto:

$ cat /path/to/file | mail -s "your subject" [email protected] 

man mail para más detalles.

+3

¿Qué significa 'mta' aquí, hay un nombre completo o un enlace? Como principiante, eso es lo que quiero saber. Como carezco de experiencia para hacer eso. – Zen

+3

@Zen MTA significa Agente de transporte de correo. postfix, sendmail, qmail, etc. –

+0

@Zen en su mayor parte, puede considerar que MTA significa servidor SMTP o IMAP. – user151841

0

El comando mail hace eso (¿quién hubiera imaginado ;-). Abra su shell e ingrese man mail para obtener la página de manual del comando mail para todas las opciones disponibles.

+2

Lo hice pero no hay ninguna opción para especificar un servidor para usar – Zubair

+1

Eso es parte de la configuración de su agente local de transferencia de correo, por ejemplo Sendmail o Postfix. – DarkDust

+0

ok, funcionó, gracias – Zubair

6

Generalmente, querrá usar el comando mail para enviar su mensaje utilizando MTA local (que lo entregará mediante SMTP al destino o simplemente lo enviará a un servidor SMTP más potente, por ejemplo, en su ISP) . Si no tiene un MTA local (aunque es un poco inusual que un sistema de tipo UNIX omita uno), puede usar un MTA minimalista como ssmtp.

ssmtp es muy fácil de configurar. Básicamente, sólo tendrá que especificar el lugar en el servidor SMTP de su proveedor es:

# The place where the mail goes. The actual machine name is required 
# no MX records are consulted. Commonly mailhosts are named mail.domain.com 
# The example will fit if you are in domain.com and you mailhub is so named. 
mailhub=mail 

Otra opción es utilizar una de las secuencias de comandos miríadas de que sólo tiene que conectar con el servidor SMTP directamente y tratar de enviar un mensaje allí, como Smtp-Auth-Email-Script , smtp-cli, SendEmail, etc.

+0

"ssmtp" estaba instalado en la máquina, así que no pude probarlo, pero gracias de todos modos – Zubair

20

Si tanto exim como ssmtp están en ejecución, puede tener problemas. Entonces, si solo desea ejecutar un MTA simple, solo para tener un cliente smtp simple para enviar notificaciones de correo electrónico para insistencia, deberá purgar el MTA eventualmente preinstalado como exim o postfix primero y reinstalar ssmtp.

Entonces es bastante sencillo, la configuración de sólo 2 archivos (revaliases y ssmtp.conf) - Ver ssmtp doc -, y su uso en su fiesta o secuencia de comandos Bourne es como:

#!/bin/sh 
SUBJECT=$1 
RECEIVER=$2 
TEXT=$3 

SERVER_NAME=$HOSTNAME 
SENDER=$(whoami) 
USER="noreply" 

[[ -z $1 ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME" 
[[ -z $2 ]] && RECEIVER="another_configured_email_address" 
[[ -z $3 ]] && TEXT="no text content" 

MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT" 
echo -e $MAIL_TXT | sendmail -t 
exit $? 

Obviamente no se olvide abra su salida de firewall al puerto smtp (25).

+0

¿Dónde puedo cambiar el número de puerto en este script? En mi servidor, el puerto smtp funciona en 8181. – manix

+0

No haría esto en este shell, de lo contrario quedarás atrapado tarde o temprano. Podrías hacerlo en el archivo de configuración: ver http://unix.stackexchange.com/a/132731 – hornetbzz

+0

¿Por qué se renuevan las líneas nuevas si hago echo simple $ MAIL_TXT? – KernelPanic

3

Admitiendo que desea utilizar algún servidor SMTP, puede hacerlo:

export SUBJECT=some_subject 
export smtp=somehost:someport 
export [email protected] 
echo "some message" | mailx -s "$SUBJECT" "$EMAIL" 

Cambio somehost, someport y [email protected] a los valores reales que usaría. En este ejemplo no se realiza encriptación ni autenticación.

+0

¿Y qué hacer si 'mailx' no está instalado? – nalply

70

Si desea un enfoque sencillo y limpio en bash, y usted no desea utilizar cat, echo, etc., la manera más simple sería:

mail -s "subject here" [email protected] <<< "message" 

<<< se utiliza para redirigir la entrada estándar . Ha sido parte de bash durante mucho tiempo.

+5

echo -e "Some \ nMultiline and tab \ t msg" | mail -s "subject" [email protected] –

+0

'cat << END' ...' END | mails "subject" test @ example.com' – ulidtko

+0

¿Cómo uso este comando en script de shell? –

6

Otra opción para en un script bash:

mailbody="Testmail via bash script" 
echo "From: [email protected]" >> /tmp/mailtest 
echo "To: [email protected]" >> /tmp/mailtest 
echo "Subject: Mailtest subject" >> /tmp/mailtest 
echo "" >> /tmp/mailtest 
echo $mailbody >> /tmp/mailtest 
cat /tmp/mailtest | /usr/sbin/sendmail -t 
  • El archivo /tmp/mailtest es cada vez sobrescribe se utiliza este script.
  • La ubicación de sendmail puede diferir según el sistema.
  • Al usar esto en un script cron, debe usar la ruta absoluta para el comando sendmail.
1

Ni siquiera necesita un MTA. El protocolo SMTP es lo suficientemente simple como para escribirlo directamente en su servidor SMTP. Incluso puede comunicarse a través de SSL/TLS si tiene el paquete OpenSSL instalado. Verifique esta publicación: https://33hops.com/send-email-from-bash-shell.html

Lo anterior es un ejemplo de cómo enviar correos electrónicos de texto/html que funcionarán de la caja. Si desea agregar archivos adjuntos, la cosa puede ser un poco más complicada, necesitará codificar64 en base a los archivos binarios e incrustarlos entre los límites. Este es un buen lugar para comenzar a investigar: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP

1

En Linux, correo utilidad se puede utilizar para enviar datos adjuntos con la opción "-a". Ve a través de las páginas man para leer sobre la opción. Por ejemplo siguiente código va a enviar un archivo adjunto:

electrónico -s "esto está sujeto" -a attachment.txt [email protected] < < < "Hola amigos, Por favor, encontrar informes de fallos."

+0

Bienvenido a SO. Gracias por publicar una respuesta. Lea la información sobre [cómo escribir una buena respuesta] (https://stackoverflow.com/help/how-to-answer) y modifique en consecuencia. Disfruta SO ;-) – ZF007

Cuestiones relacionadas