Enviar correo a través de Gmail con Python
Buenas... pues para aquellos que necesiten hacer un programita que mande notificaciones a alguien, puede usar alguno de los cientos de programas que existen por ahí... o puede hacer su propio notificador vía e-mail. En python es ultra sencillo y hay varios métodos, que yo conozca: conectar a un servidor SMTP, autenticarse y mandar el mensaje; o ser uno mismo el servidor y conectarse con un relay que te autorice (también soportado en python). En esta receta explicamos la primera, que es más simple (aunque también requiere tener la contraseña por algún lado, en el ejemplo la pediremos al usuario y listo...).
A cerca de Gmail
Bueno, este servidor, al igual que otros muchos por ahí, utiliza conexiones cifradas, por lo que mandar un correo nos obligará a establecer una conexión segura antes de autenticarnos (lo cual está muy requetebién y es muy sencillo). Supongo que esta receta funcionará igual para todos aquellos servidores que requieran TLS puesto que cumple con la RFC 821 y la RFC 1869 (que alguien ponga los enlaces si quiere, yo voy con prisas :P).Componer el mensaje
En python un mail es básicamente un diccionario cuyas keys son los nombres de los campos: Subject, Reply-To, etc... pero que además nos ofrece un par de métodos interesantes que nos permiten attach-ear imágenes y codificar todo el mensaje como mensaje MIME:Mensaje de texto corriente y moliente
from email.MIMEText import MIMEText
msg = MIMEText("Hello World,\no algo parecido...")
msg['Subject'] = 'Esto es una prueba'
msg['From'] = "Juancar I"
msg['Reply-to'] = "La casa ficticia"
msg['To'] = "La Sofi"
Mensaje con texto y fotos
Esto está sacado de la documentación de python y no lo he probado, pero en teoría funciona, si alguien me lo confirma pues mejor que mejor. Como dije antes, voy con prisa! :P
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
msg = MIMEMultipart()
msg['Subject'] = 'Tu maridito achantando!'
msg['From'] = 'Juancar I'
msg['To'] = 'La Sofi'
msg.preamble = 'Nuestro viajecito pagado'
imagen = open('/home/juancar/vacaciones/visita_usa/callate01.png', 'rb')
attachment = MIMEImage(imagen.read())
imagen.close()
msg.attach(attachment)
Conectar con el servidor SMTP
Asumimos aquí que tienes un objeto msg construído como anteriormente explicamos, pues bien, la cosa queda más o menos tal que así:import getpass
import smtplib
sender = smtplib.SMTP('smtp.gmail.com')
sender.ehlo()
sender.starttls()
usuario_gmail = 'ssmm_juancar'
sender.login(usuario_gmail, getpass.getpass())
origen = usuario_gmail + '@gmail.com'
destino = 'ssmm_sofi@yahoo.es'
sender.sendmail(origen, destino, msg.as_string())
sender.close()
Enlaces
[ show comments ]
blog comments powered by Disqus