Enviar un correo desde un script de shell de Linux
120
Quiero enviar un correo electrónico desde un script de Shell de Linux. ¿Cuál es el comando estándar para hacer esto? ¿Necesito configurar nombres de servidor especiales?
¿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
5
@Zen MTA significa agente de transporte de correo. postfix, sendmail, qmail, etc.
Francesco Laurita
@Zen en su mayor parte, puede considerar que MTA significa servidor SMTP o IMAP.
user151841
1
Si no está seguro de cómo instalar / configurar y está en Ubuntu: sudo apt-get install mailutilsy seleccione el sitio de Internet: El correo se envía y se recibe directamente usando SMTP. .
user1717828
86
Si desea que un enfoque sencillo y limpio en bash, y usted no desea utilizar cat, echoetc., la manera más simple sería:
mail -s "subject here" email@address.com <<<"message"
<<<se utiliza para redirigir la entrada estándar. Ha sido parte de bash durante mucho tiempo.
¡Oye, esto funcionó muy bien para mí, gracias! ¿Cómo puedo especificar varias direcciones a las que enviar?
E.Owen
1
@ E.Owen Puede usar la opción -t para enviar a varias direcciones separadas por espacios
Jon
25
Si tanto exim como ssmtp se están ejecutando, puede tener problemas. Entonces, si solo desea ejecutar un MTA simple, solo para tener un cliente smtp simple para enviar notificaciones por correo electrónico para solicitar asistencia, primero debe purgar el MTA eventualmente preinstalado como exim o postfix y reinstalar ssmtp.
Entonces es bastante sencillo, configurar solo 2 archivos (revaliases y ssmtp.conf) - Ver ssmtp doc -, y el uso en su script bash o 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 olvide abrir la salida de su firewall al puerto smtp (25).
¿Dónde puedo cambiar el número de puerto en este script? En mi servidor, el puerto smtp funciona sobre 8181.
manix
No haría esto en este caparazón, de lo contrario, tarde o temprano te quedarás atrapado. Puede hacerlo en el archivo de configuración: consulte unix.stackexchange.com/a/132731
hornetbzz
1
¿Por qué se ingresan nuevas líneas si hago un eco simple $ MAIL_TXT?
KernelPanic
1
@Marko: Por favor, vea man echo con la opción -e: habilite la interpretación de los escapes de barra invertida
votó en contra porque más de un proceso podría llamar al script al mismo tiempo. Esto podría causar un archivo tmp dañado / incorrecto. Además, el archivo / tmp no se sobrescribe cada vez que se usa; en realidad, crece con cada correo electrónico que contiene todos los correos electrónicos anteriores. No está bien.
Taterhead
1
La primera escritura en / tmp / mailtest es una sobrescritura, por lo que eliminará lo que estaba allí anteriormente. Aún así, este método no es ideal por las otras razones que ha descrito.
Simon
8
Generalmente, querrá usar el mailcomando para enviar su mensaje usando el MTA local (que lo entregará usando SMTP al destino o simplemente lo reenviará a algún servidor SMTP más poderoso, por ejemplo, en su ISP). Si no tiene un MTA local (aunque es un poco inusual que un sistema tipo UNIX omita uno), puede usar algún MTA minimalista como ssmtp .
ssmtpes bastante fácil de configurar. Básicamente, solo necesitará especificar dónde está el servidor SMTP de su proveedor:
# 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 usar uno de los innumerables scripts que simplemente se conectan al servidor SMTP directamente e intentan publicar un mensaje allí, como Smtp-Auth-Email-Script , smtp-cli , SendEmail , etc.
El mailcomando hace eso (quién lo hubiera adivinado ;-). Abra su shell e ingrese man mailpara obtener la página del manual del mailcomando para todas las opciones disponibles.
Hice eso, pero no hay opción para especificar un servidor para usar
appshare.co
1
Eso es parte de la configuración de su agente de transferencia de correo local, por ejemplo, Sendmail o Postfix.
DarkDust
2
Ni siquiera necesitas 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 instalado el paquete OpenSSL. Consulte 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 desde el primer momento. Si desea agregar archivos adjuntos, la cosa puede volverse un poco más complicada, deberá codificar en base64 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
En Linux, la utilidad de correo se puede utilizar para enviar archivos adjuntos con la opción "-a". Revise las páginas de manual para leer sobre la opción. Por ejemplo, el siguiente código enviará un archivo adjunto:
mail -s "ESTE ES SUJETO" -a archivo adjunto.txt [email protected] <<< "Hola amigo, busca informes de fallas".
Bienvenido a SO. Gracias por publicar una respuesta. Lea la información sobre cómo escribir una buena respuesta y modifíquela en consecuencia. Enjoy SO ;-)
smtp_sasl_security_options que en la configuración se establecerán en vacío , para garantizar que no se utilicen opciones de seguridad incompatibles con Gmail .
agregue el cuerpo del correo como desee, presione enter y luego presione ctrl + d para la terminación adecuada
si no funciona, vuelva a comprobar todos los pasos y compruebe si habilita la " aplicación menos segura" en su gmail
luego reinicie postfix si modifica algo en eso
para el script de shell, cree el archivo .sh y agregue el comando de 6 pasos como requisito
por ejemplo solo para una muestra
#!/bin/bash
REALVALUE=$(df /| grep /| awk '{ print $5}'| sed 's/%//g')
THRESHOLD=80if["$REALVALUE"-gt "$THRESHOLD"];then
mail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low.Used: $REALVALUE%
EOF
fi
La secuencia de comandos envía un correo electrónico cuando el uso del disco supera el porcentaje especificado por la variable UMBRAL (80% aquí).
¿No debería el nombre de esta respuesta ser "ENVIAR CORREO DESDE LINUX A [email protected] A TRAVÉS DE GMAIL"?
Cameron Hudson
1
puede utilizar el comando 'email' o 'emailx'.
(1) $ vim /etc/mail.rc # o # vim /etc/nail.rc
set from = xxx@xxx.com #set smtp = smtp.exmail.gmail.com #gmail's smtp server set smtp-auth-user = xxx@xxx.com #sender's email addressset smtp-auth-password = xxxxxxx #get from gmail, not your email account passwdset smtp-auth=login
Porque si no se envía desde una cuenta autorizada, el correo electrónico llegará a la lista de correo basura.
(2) $ echo "¡Por favor recuerde eliminar los temas ons no utilizados!" | mail -s "temas de desperdicio" -a a.txt [email protected] #send to group user '[email protected]'
Respuestas:
Si el servidor está bien configurado, por ejemplo, tiene un MTA en funcionamiento, puede usar el comando mail.
Por ejemplo, para enviar el contenido de un archivo, puede hacer esto:
man mail
para más detalles.fuente
sudo apt-get install mailutils
y seleccione el sitio de Internet: El correo se envía y se recibe directamente usando SMTP. .Si desea que un enfoque sencillo y limpio en bash, y usted no desea utilizar
cat
,echo
etc., la manera más simple sería:<<<
se utiliza para redirigir la entrada estándar. Ha sido parte de bash durante mucho tiempo.fuente
cat << END
...END | mail -s "subject" [email protected]
Si tanto exim como ssmtp se están ejecutando, puede tener problemas. Entonces, si solo desea ejecutar un MTA simple, solo para tener un cliente smtp simple para enviar notificaciones por correo electrónico para solicitar asistencia, primero debe purgar el MTA eventualmente preinstalado como exim o postfix y reinstalar ssmtp.
Entonces es bastante sencillo, configurar solo 2 archivos (revaliases y ssmtp.conf) - Ver ssmtp doc -, y el uso en su script bash o bourne es como:
Obviamente, no olvide abrir la salida de su firewall al puerto smtp (25).
fuente
Otra opción para en un script bash:
/tmp/mailtest
se sobrescribe cada vez que se utiliza este script.fuente
Generalmente, querrá usar el
mail
comando para enviar su mensaje usando el MTA local (que lo entregará usando SMTP al destino o simplemente lo reenviará a algún servidor SMTP más poderoso, por ejemplo, en su ISP). Si no tiene un MTA local (aunque es un poco inusual que un sistema tipo UNIX omita uno), puede usar algún MTA minimalista como ssmtp .ssmtp
es bastante fácil de configurar. Básicamente, solo necesitará especificar dónde está el servidor SMTP de su proveedor:Otra opción es usar uno de los innumerables scripts que simplemente se conectan al servidor SMTP directamente e intentan publicar un mensaje allí, como Smtp-Auth-Email-Script , smtp-cli , SendEmail , etc.
fuente
Admitiendo que desea utilizar algún servidor smtp, puede hacer:
Cambie
somehost
,someport
ysomeaccount@somedomain
a los valores reales que usaría. En este ejemplo no se realiza encriptación ni autenticación.fuente
mailx
no está instalado?El
mail
comando hace eso (quién lo hubiera adivinado ;-). Abra su shell e ingreseman mail
para obtener la página del manual delmail
comando para todas las opciones disponibles.fuente
Ni siquiera necesitas 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 instalado el paquete OpenSSL. Consulte 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 desde el primer momento. Si desea agregar archivos adjuntos, la cosa puede volverse un poco más complicada, deberá codificar en base64 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
fuente
En Linux, la utilidad de correo se puede utilizar para enviar archivos adjuntos con la opción "-a". Revise las páginas de manual para leer sobre la opción. Por ejemplo, el siguiente código enviará un archivo adjunto:
mail -s "ESTE ES SUJETO" -a archivo adjunto.txt [email protected] <<< "Hola amigo, busca informes de fallas".
fuente
ENVIAR CORREO DE LINUX A GMAIL
USANDO POSTFIX
1: instalar software
Debian y Ubuntu:
OpenSUSE:
Fedora:
CentOS:
Arch Linux:
FreeBSD:
en configuración, seleccione el soporte SASL
2. Configurar Gmail
/ etc / postfix. Cree o edite el archivo de contraseña:
Estoy usando vim, puedes usar cualquier editor de archivos como nano, cat .....
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
Agrega esto
donde el usuario reemplaza con su nombre de correo y contraseña es su contraseña de gmail
Guarde y cierre el archivo y hágalo accesible solo por root: porque es un contenido sensible que contiene su contraseña
> FreeBSD:
directorio / usr / local / etc / postfix.
Agrega la línea:
Guárdelo y hágalo accesible solo por root:
3. Configuración de postfix
archivo de configuración main.cf
6 parámetros que debemos establecer en el Postfix
Ubuntu, Arch Linux, Debian:
editar
modificar los siguientes valores:
smtp_sasl_security_options que en la configuración se establecerán en vacío , para garantizar que no se utilicen opciones de seguridad incompatibles con Gmail .
guardar y cerrar
como para
OpenSUSE:
modificar
también requiere la configuración del archivo master.cf
modificar:
como al descomentar esta línea (eliminar #)
guardar y cerrar
Fedora, CentOS:
modificar
FreeBSD:
modificar:
guardar y cerrar esto
4. Procesar archivo de contraseña:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
para FreeBSD
4.1) Reiniciar postfix
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
para FreeBSD:
añadir
guardar y luego ejecutar para comenzar
5. Habilite "Aplicaciones menos seguras" en Gmail con la ayuda del vínculo siguiente
https://support.google.com/accounts/answer/6010255
6. Envíe un correo electrónico de prueba
presione enter
agregue el cuerpo del correo como desee, presione enter y luego presione ctrl + d para la terminación adecuada
si no funciona, vuelva a comprobar todos los pasos y compruebe si habilita la " aplicación menos segura" en su gmail
luego reinicie postfix si modifica algo en eso
para el script de shell, cree el archivo .sh y agregue el comando de 6 pasos como requisito
por ejemplo solo para una muestra
La secuencia de comandos envía un correo electrónico cuando el uso del disco supera el porcentaje especificado por la variable UMBRAL (80% aquí).
fuente
puede utilizar el comando 'email' o 'emailx'.
(1) $ vim /etc/mail.rc # o # vim /etc/nail.rc
Porque si no se envía desde una cuenta autorizada, el correo electrónico llegará a la lista de correo basura.
(2) $ echo "¡Por favor recuerde eliminar los temas ons no utilizados!" | mail -s "temas de desperdicio" -a a.txt [email protected] #send to group user '[email protected]'
fuente