03 diciembre 2007

Cómo enviar mails en línea de comandos con bash

Mails en línea de comandos en Windows

Este truco simplemente hace uso del comando mail, que suele estar instalado en todas las distribuciones. Si no estuviera instalado simplemente hay que instalar el paquete mailx.

Yo lo utilizo para probar rápidamente scripts de envío de correo.

La línea que se escribe es ésta:
echo "cuerpo del mensaje" | mail -s "asunto" cuenta@dominio.com

Se puede observar que es muy sencillo.

3 comentarios:

Anónimo dijo...

Parece que funciona (por lo menos no aparece ningún error), pero los mensajes no llegan (a gmail o yahoo). ¿Cómo puedo saber si hay algo mal configurado?

josé dijo...

Hombre, puedes ver los logs y confirmar que sale. Si utilizas sendmail o postfix, si no están arrancados se quedan en cola.

Si ejecutas "mailq" sin comillas puedes ver la cola de mensajes. También si miras el log del correo, incluso messages, depende de cómo lo tengas configurado, te puede dar pistas. A mi estos mensajes a gmail me llegaban, a hotmail y yahoo es problemático por sus filtros antispam. Si está funcionando y no te llega a gmail, puede ser que tenga que tener un registro MX el host desde el cual lo envías. Date cuenta de que en líneas generales el spam se envía así...

Saludos

Rafael Campoverde dijo...

Anonimo, si no tienes montado un serv de correo puedes revisar los correos del sistema ejecutando el comando: "mail" y te devolvera una lista de correos para el usuario con el que se ejecuto.

Tambien puedes abrir otra consola y escribir "tail -f /var/log/maillog"

esto te mostrara en tiempo real cualquier cosa que pase en el servicio de correo, es decir, si ejecutas tu comando en otra consola deberias ver algo asi en la consola del tail -f...:
Jul 30 01:00:05 ServPeque postfix/pickup[26568]: 6F0FF72B4B: uid=0 from=
Jul 30 01:00:05 ServPeque postfix/cleanup[27250]: 6F0FF72B4B: message-id=<20110730060005.6F0FF72B4B@ServPeque.rafaelcampoverde.no-ip.biz>
Jul 30 01:00:05 ServPeque postfix/qmgr[20822]: 6F0FF72B4B: from=, size=1596, nrcpt=1 (queue active)
Jul 30 01:00:05 ServPeque postfix/local[27252]: 6F0FF72B4B: to=, relay=local, delay=0.13, delays=0.07/0/0/0.06, dsn=2.0.0, status=sent (delivered to maildir)
Jul 30 01:00:05 ServPeque postfix/qmgr[20822]: 6F0FF72B4B: removed
Este es el log de un servidor de correos, lo que significa que no necesariamente sera asi.. pero tendrias que ver algo similar. suerte!! te paso un ejemplo de un scriptque acavo dearmar con varios tutos de inter haber si te sirve como ejemplo:
#!/bin/bash
echo "############$(date)################" >> /var/log/prueba_ping.log
echo "haciendo ping a: $1" >> /var/log/prueba_ping.log
ping -c 2 "$1" > /dev/null 2>&1
if [[ "$?" != "0" ]]
then
echo "!!!ALERTA!!! ping con problemas a $1." >> /var/log/prueba_ping.log
echo "##################################################" >> /var/log/prueba_ping.log
echo "$(tail -n 30 /var/log/prueba_ping.log)" | mail -s "!!!ALERTA!!! ping con problemas a $1." rafael@.biz > /dev/null 2>&1
else
echo "ping sin problemas a $1." >> /var/log/prueba_ping.log
fi
echo "" >> /var/log/prueba_ping.log
este script hace ping a googoel y cuando no hay respuesta me manda un mail con las ultimas 30lineas de un log que almacena el resultado de dichos pings.