domingo, 17 de diciembre de 2017

Enviar un e-mail desde Python

Veamos como podemos enviar un correo electrónico desde Python utilizando la librería smtplib. Para el ejemplo de hoy usaremos la librería smtplib de Python para enviar un correo electrónico desde una cuenta Gmail, como recomendación usen una cuenta que no les sirva para enviar los correos.



Antes de todo debemos configurar nuestra cuenta, para que permita el acceso de aplicaciones menos seguras, es decir, que nos permita autenticar nuestra cuenta desde nuestro script en python.

Para ello nos dirigimos a nuestra cuenta de Gmail y habilitamos la opción "Permitir el acceso de aplicaciones menos seguras":




Ahora si podemos loguearnos, luego necesitaremos crear un archivo que contendrá el mensaje que vamos a enviar, en mi caso yo cree un archivo llamado "body.txt"  que contiene el siguiente mensaje:



El cual debemos indicar la ubicacion en nuestro script:

import time, datetime
import smtplib

file_log = '/home/paolo/Escritorio/body.txt'

def SendEmail(user, pwd, recipient, subject, body):
  
  gmail_user= user
  gmail_pass = pwd
  FROM = user
  TO = recipient if type(recipient) is list else [recipient]
  SUBJECT = subject
  TEXT = body
  
  message = """\From: %s\nTo: %s\nSubject: %s\n\n%s
  """ % (FROM, ", ".join(TO), SUBJECT, TEXT)
  try:
    server = smtplib.SMTP("smtp.gmail.com", 587)
    server.ehlo()
    print server.ehlo()
    server.starttls()
    server.ehlo()
    print server.ehlo()
    server.login(gmail_user, gmail_pass)
    print("logueado")
    server.sendmail(FROM, TO, TEXT)
    print("enviando")
    server.close()
    print ('Correo enviado satisfactoriamente!')
  except Exception as e:
    print(e)

def FormatAndSendLogEmail():
  with open(file_log, 'r+') as f:
    actualdate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    data = f.read().replace('\n', '')
    data = 'Log capturado a las: '+ actualdate + '\n' + data
    print(data)
    SendEmail('unacuentafake@gmail.com', 'clavedelacuenta', 'correoamandar@gmail.com',
              'Nuevo log - '+actualdate, data)
    f.seek(0)
    f.truncate()
    


FormatAndSendLogEmail()
print("fin")


Enviando un e-mail


En nuestro script tenemos 2 funciones (una para pasarle los datos que requiere: FormatAndSendLoEmail y otra la funcion en si que envia el e-mail: SendEmail).

Lo primero que debemos hacer es modificar la variable de nuestro archivo que contiene el mensaje a enviar:

file_log = 'ruta/body.txt'


Luego debemos modificar los datos que pasamos a la funcion SendEmail:

SendEmail('unacuentafake@gmail.com', 'clavedelacuenta', 'correoamandar@gmail.com',
              'Nuevo log - '+actualdate, data)


Ademas si deseamos hacerlo con otro servidor de correo, debemos configurar esta parte
del código, en el caso de Gmail es asi:

server = smtplib.SMTP("smtp.gmail.com", 587)

Y por ultimo correr nuestro Script:




Si no tenemos ningún error, significa que todo ha salido bien.
Ahora veamos al correo enviado:




Y pues eso es todo, así de sencillo. Si no les aparece el correo en la bandeja
de entrada, revisen en Spam, por lo general aparece ahí.

No hay comentarios.:

Publicar un comentario