Enviar correos mediante smtplib de python y una cuenta de gmail
En algunas ocasiones necesito enviar los resultados que me devuelve el arduino a mi teléfono para avisarme de alguna anomalía. Lo primero que se le viene a la cabeza a uno es hacer un programa para el móvil para recibir los datos, ahora que se ha puesto de moda hacer «app’s» para todo ( ya no son programas o aplicaciones ahora son «app’s»).
Pero yo no necesito un programa que me este ocupando espacio y memoria en el teléfono para recibir una alerta una vez al mes a lo sumo. Aprovechando que el «android» te pide una dirección de correo para poder acceder a «Google Play» y que además, esta en todo momento mirando el contenido de esa cuenta, lo mas fácil es que el arduino mande un correo a esa cuenta. Por ello le he implementado una opción al programa que gestiona el arduino para que me mande el correo.
Para poder enviar un correo a través de Python, lenguaje con el que gestiono el arduino, solo tenemos que hacer uso de la librería «smtplib», esta librería nos proporciona todas la funciones necesarias para poder enviar el correo.
Lo primero que haremos el importar la función desde la librería.
from smtplib import SMTP
Una vez que ya podemos utilizar la librería, creamos la variable que gestionara el envío.
EnviarCorreo = SMTP()
Nos conectamos al servidor de correo saliente de gmail, smtp.gmail.com que esta a la escucha en el puerto 587, para utilizar cualquier otro servidor tendremos que cambiar el servidor y el puerto por el que este escuchando.
EnviarCorreo.connect("smtp.gmail.com", 587)
El servidor de gmail necesita que habilitemos el modo TTL, esto es uno de los métodos de enviar el correo de forma segura, el otro modo seria utilizar SSL.
EnviarCorreo.starttls()
Esto me ha dado problemas algunas veces, buscando por internet he visto que varia gente utiliza esta forma para activar el TTL.
EnviarCorreo.ehlo()
EnviarCorreo.starttls()
EnviarCorreo.ehlo()
Lo que hace la función «.ehlo()» es decirle a «EnviarCorreo» que se ponga en modo de enviar un correo. Es decir, ponemos la función en modo de enviar correo, le decimos que vamos ha enviar el correo utilizando TTL, y volvemos a indicarle que se vuelva poner modo de enviar un correo, esta vez, si para enviar el correo.
Antes de enviar el correo, nos identificamos en el servidor de la siguiente forma.
EnviarCorreo.login(usuario@gmail.com, contraseña_de_la_cuenta)
Ahora solo nos queda montar el correo que queremos enviar. Para ello tenemos que crear tanto la cabecera del mensaje, donde ira la dirección de quien lo envía, la dirección de quien lo recibe, el asunto del mensaje, y demás información que podemos incluir en la cabecera, y por ultimo crear el cuerpo del mensaje.
Cabecera = 'To:' + Direccion_Desti + '\n'
Cabecera += 'From: ' + Direccion_Remi + '\n'
Cabecera += 'Subject: ' + Asunto_Mensaje + '\n'+'\n'
Esta seria una cabecera básica, al final del cuerpo incluimos dos saltos de linea, porque? no lo se aun.
Para crear el cuerpo solo tenemos que pasar el contenido del mensaje a una variable del tipo string.
CuerpoMensaje = "Esto es el cuerpo del mensaje" + '\n' + '\n'
Como en la cabecera, terminamos el cuerpo del mensaje con dos salto de linea, la explicación no la se todavía.
Y ya tenemos todo listo para enviar el correo.
EnviarCorreo.sendmail(Direccion_Remi, Direccion_Desti, Cabecera + CuerpoMensaje)
Y con esto, y si todo esta bien, ya hemos enviado el correo. Ahora solo nos queda cerrar la comunicación con el servidor SMTP.
smtpserver.close()
Y listo, ya hemos mando la alerta a nuestro teléfono móvil, y sin tener que instalar ninguna aplicación nueva y sin tener que hacer nada en el teléfono.
Que te ha parecido?