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?
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?
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:
$ cat /path/to/file | mail -s "your subject" your@email.com
man mail
para más detalles.
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:
mail -s "subject here" email@address.com <<< "message"
<<<
se utiliza para redirigir la entrada estándar. Ha sido parte de bash durante mucho tiempo.
cat << END
...END | mail -s "subject" test@example.com
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).
Otra opción para en un script bash:
mailbody="Testmail via bash script"
echo "From: info@myserver.test" > /tmp/mailtest
echo "To: john@mywebsite.test" >> /tmp/mailtest
echo "Subject: Mailtest subject" >> /tmp/mailtest
echo "" >> /tmp/mailtest
echo $mailbody >> /tmp/mailtest
cat /tmp/mailtest | /usr/sbin/sendmail -t
/tmp/mailtest
se sobrescribe cada vez que se utiliza este script.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:
# 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.
Admitiendo que desea utilizar algún servidor smtp, puede hacer:
export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"
Cambie somehost
, someport
y someaccount@somedomain
a los valores reales que usaría. En este ejemplo no se realiza encriptación ni autenticación.
mailx
no está instalado?
El mail
comando hace eso (quién lo hubiera adivinado ;-). Abra su shell e ingrese man mail
para obtener la página del manual del mail
comando para todas las opciones disponibles.
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 nombre@dominio.com <<< "Hola amigo, busca informes de fallas".
USANDO POSTFIX
1: instalar software
Debian y Ubuntu:
apt-get update && apt-get install postfix mailutils
OpenSUSE:
zypper update && zypper install postfix mailx cyrus-sasl
Fedora:
dnf update && dnf install postfix mailx
CentOS:
yum update && yum install postfix mailx cyrus-sasl cyrus-sasl-plain
Arch Linux:
pacman -Sy postfix mailutils
FreeBSD:
portsnap fetch extract update
cd /usr/ports/mail/postfix
make config
en configuración, seleccione el soporte SASL
make install clean
pkg install mailx
2. Configurar Gmail
/ etc / postfix. Cree o edite el archivo de contraseña:
vim /etc/postfix/sasl_passwd
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
[smtp.gmail.com]:587 user@gmail.com:password
Guarde y cierre el archivo y hágalo accesible solo por root: porque es un contenido sensible que contiene su contraseña
chmod 600 /usr/local/etc/postfix/sasl_passwd
> FreeBSD:
directorio / usr / local / etc / postfix.
vim /usr/local/etc/postfix/sasl_passwd
Agrega la línea:
[smtp.gmail.com]:587 user@gmail.com:password
Guárdelo y hágalo accesible solo por root:
chmod 600 /usr/local/etc/postfix/sasl_passwd
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
vim /etc/postfix/main.cf
modificar los siguientes valores:
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
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:
vim /etc/postfix/main.cf
modificar
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/ca-bundle.pem
también requiere la configuración del archivo master.cf
modificar:
vim /etc/postfix/master.cf
como al descomentar esta línea (eliminar #)
#tlsmgr unix - - n 1000? 1 tlsmg
guardar y cerrar
Fedora, CentOS:
vim /etc/postfix/main.cf
modificar
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
FreeBSD:
vim /usr/local/etc/postfix/main.cf
modificar:
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/mail/certs/cacert.pem
guardar y cerrar esto
4. Procesar archivo de contraseña:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
postmap /etc/postfix/sasl_passwd
para FreeBSD
postmap /usr/local/etc/postfix/sasl_passwd
4.1) Reiniciar postfix
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
systemctl restart postfix.service
para FreeBSD:
service postfix onestart
nano /etc/rc.conf
añadir
postfix_enable=YES
guardar y luego ejecutar para comenzar
service postfix start
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
mail -s "subject" recever@domain.com
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
#!/bin/bash
REALVALUE=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=80
if [ "$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í).
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 address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login
(2) $ echo "¡Por favor recuerde eliminar los temas ons no utilizados!" | mail -s "temas de desperdicio" -a a.txt developer@xxx.com #send to group user 'developer@xxxx.com'