Siguiendo con el tema de montar nuestro propio servidor casero, hoy os explicaré cómo podemos conseguir enviar correos electrónicos desde nuestra pi, para poder informar sobre la temperatura, estado del sistema, etc… Ya os avanzo que podréis encontrar estas mismas instrucciones en otras muchas páginas relacionadas con el tema, pero como siempre, he querido explicarlo a mi manera, para ampliar, si cabe, la información y hacerla mas entendible por todos.
Haremos uso de un cliente de correo por línea de comando, el archi conocido sendmail. Parece ser que, teóricamente, Raspbian debería tener ya instalado el sendmail, pero podría darse el caso de que no fuera así. Si es este vuestro caso, lo instalaremos como ya viene siendo costumbre, con apt-get install.
Instalación de sendmail
Procederemos a actualizar el sistema, antes de nada, y posteriormente a instalar sendmail:
jordi@raspberrypi ~ $ sudo apt-get update jordi@raspberrypi ~ $ sudo apt-get upgrade jordi@raspberrypi ~ $ sudo apt-get install sendmail
Ahora ya tenemos sendmail en nuestro sistema. Aún así, para facilitar algo mas las cosas, instalaremos algunas herramientas adicionales, como un configurador del servidor smtp y otras utilidades:
jordi@raspberrypi ~ $ sudo apt-get install ssmtp jordi@raspberrypi ~ $ sudo apt-get install mailutils
Tras esto ya podemos configurar nuestro servidor de correo smtp…
Configuración de la pasarela del servidor smtp
La aplicación ssmtp (https://wiki.archlinux.org/index.php/SSMTP) no es exactamente un servidor smpt, sino mas bien una pasarela sobre sendmail. Es decir, nos ayuda a redirigir nuestros correos de salida hacia un servidor de correo saliente sobre el que tenemos permiso. Para las pruebas haremos uso de una cuenta de Gmail, por dos motivos: por que hoy en día casi todo el mundo tiene una y ofrece los datos de conexión en su propia web y, casi mas importante, porque la mayoría de los tutoriales que encontraremos por la red relacionados con este tema hacen uso de ella…
Editamos el fichero de configuración:
jordi@raspberrypi ~ $ sudo nano /etc/ssmtp/ssmtp.conf
y añadimos al final:
AuthUser=tuUsuario@gmail.com AuthPass=tupassword FromLineOverride=YES mailhub=smtp.gmail.com:587 UseSTARTTLS=YES
dónde tuUsuario@gamil.com deberás poner tu cuenta de Gmail y aplicar la configuración según corresponda. Si disponéis de vuestro propio servicio, también podéis ponerlo aquí. Yo por ejemplo tengo el de mi ISP, y para mi servidor uso ese. Por otro lado, hay quien prefire configurar el smtp de la pi y usar el propio host como servidor de correo saliente. No es mala idea, si no tenéis pensado recibir mensajes…
Enviando correo
Ahora ya podemos enviar un mensaje desde la línea de comando:
jordi@raspberrypi ~ $ echo "Hola Jordi!!!" | mail -s "Asunto" tuOtroCorreo@host.com
Sed pacientes, en breve recibiréis el correo en el buzón que le hayáis indicado como tuOtroCorreo@host.com.
La ejecución es muy sencilla, y si recibís algún error tras ejecutar el comando, revisad varias cosas:
- tenéis abierto / permiso para usar el puerto de correo de salida
- habéis configurado correctamente el ssmtp
A continuación os dejo un ejemplo de error por mala configuración:
jordi@raspberrypi ~ $ send-mail: Authorization failed (535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 57kj33hj5j.21 - gsmtp)
En caso de que todo vaya bien, no recibiréis ningún mensaje por pantalla, y el correo habrá sido enviado, apareciendo las credenciales de la cuenta que habéis configurado.
Enviando archivos adjuntos
Para enviar archivos adjuntos con sendmail utilizaremos una utilidad llamada mpack. Con ella simplemente pondremos un wrapper a sendmail con el que podremos adjuntar ficheros a nuestro correo.
Lo instalamos con…
jordi@raspberrypi ~ $ sudo apt-get install mpack
Y una vez instalado, podemos probar con cualquier fichero.
Creemos un sencillo fichero de texto, que adjuntaremos a nuestro próximo correo…
jordi@raspberrypi ~ $ echo "Hola buenas tardes, este es un fichero de texto adjunto a tu correo electrónico" > attachment.txt jordi@raspberrypi ~ $ cat attachment.txt Hola buenas tardes, este es un fichero de texto adjunto a tu correo electrónico
Y lo enviamos…
jordi@raspberrypi ~ $ mpack -s "Este es un correo de prueba con adjunto" ./attachment.txt tuOtroCorreo@host.com
Una vez mas, si no recibimos mensajes de respuesta, es que hemos realizado el envío correctamente. Si nos equivocamos en la sintaxis, posiblemente salga la ayuda del comando mpack…
Y con esto acabamos este mini tutorial. Espero que os haya parecido interesante!
Jordi
Hola Jordi, me parece que has escrito un tutorial como debe ser, sencillito y bien explicado, pero aun así me sucede un error tratando de mandar un correo. Primeramente me da error al instalar mailutils, y despues al mandar el correo me dice: bash: !”: event not found
Perdón si es algo que debería saber pero me estoy iniciando en el mundo de la RPi y no tengo aun mucha base, y me gustaría automatizar el envio de un correo cuando detecte algo un sensor de movimiento.
Muchas gracias, un saludo.
Muy buenas Manu, y muchas gracias por tu comentario!
Veamos, necesitaría saber qué error te da exactamente cuando intentas instalar el “mailutils”, para ver por dónde van los tiros. Para empezar, quizá sería bueno que mirases si lo instalas siendo root con el comando sudo al principio. Luego, quizá no tengas los repositorios actualizados, así que pásate por esta página, a ver si eso ayuda: http://www.raspbian.org/RaspbianRepository.
Luego, dependiendo de la versión de bash que utilices o del shell, la expresión !” es interpretada como una cadena de búsqueda dentro de una cadena de texto. Prueba a quitar esa exclamación del final, o a encerrar la cadena de texto entre comillas simples, en vez de dobles (‘). También puedes anteponer la barra de escape para que no interprete el signo de exclamación: \!”. Seguramente, aunque no me lo dices, es en la línea del texto del mensaje…
Espero haberte ayudado, pásate de nuevo por aquí y me dices qué tal. También puedes escribirme un correo: jordi@jormc.es
Gracias!
Hola, funciona perfecto, lo probé y sin lios. Me gustaria incluir un cuerpo de mensaje en el cual informar que es un correo automatico, (para eso lo uso), y que no respondan? Talves -d description file sea para eso o entendí mal la explicacion de man?
Mil gracias
Hola Orlando, gracias por comentar. Me alegra saber que te sirvió.
En cuanto al cuerpo del correco, no logro entender cómo quieres hacerlo. Creo que deberías tener una cuenta de correo creada a la que no se pueda responder, y entonces como descripción de la misma poner los datos que desees. Cuando envíes un correo a través de ella, podrán ver dicha información, en la que deberás decir que no podrán enviar correos a dicha dirección. También puedes hacerlo en el cuerpo del mensaje, que quizá sea lo mas cómodo.
Creo que el comando -D es para debuggar la ejecución. De cualquier modo no acabo de ver lo que me explicas. Si te parece, pásate por esta web: http://www.computerhope.com/unix/usendmai.htm y comentamos la configuración que necesites de parámetros.
Gracias!
Jordi, me podrías decir como enviar el correo dentro de un script? Gracias.
Muy buenas Selu, es muy sencillo. Para no reinventar la rueda, te dejo un enlace muy ilustrativo: http://stackoverflow.com/questions/13390894/using-sendmail-from-bash-script-for-multiple-recipients
Cualquier cosa me dices…
Jordi:
Solo unas letras para felicitarte por el excelente tutorial. Lo acabo de probar y ha funcionado perfectamente. Muchas gracias.
Ricardo
Muchísimas gracias Ricardo por dejar constancia de tu experiencia.
Un saludo!