Autoresponder simple con mailproc (II)

Mailproc es un microframework para la creación de servicios basados en correos electrónicos utilizando el lenguaje de programación Python, en este pequeño tutorial veremos sus principales características mientras creamos un “autoresponder” para nuestra cuenta de correo. Para completarlo, es necesario tener conocimientos de programación el lenguaje Python, conocimientos básicos de la terminal de GNU/Linux y como usar cron para la programación de tareas, además de tener instalado Python >=2.6 y <3.0.

En esta segunda parte terminaremos de escribir nuestro autoresponder, veremos como hacer que mailproc chequee los nuevos mensajes de forma automática y como darles respuesta. Recordar que este post es una continuación de la primera parte del tutorial.

Como vimos en la anterior parte, la función run() se encarga de obtener los nuevos mensajes, y mediante “process” ordena que se ejecute el código de la función “action” para cada uno de los mensajes, por lo que dentro de esta función ira el código principal de nuestro servicio.

La función “action” recibe como parámetro un objeto tipo message, que contiene la estructura del mensaje en cuestión, mediante el cual obtendremos la información necesaria:

subject = mail['Subject'].strip()
email_from = mail['From']

De esta forma obtenemos el encabezado  Subject (asunto) y From (de) del mensaje, pero para obtener solo la dirección de quien nos envía el correo, necesitamos procesar el encabezado From de la siguiente forma:

import email
from_address = email.utils.parseaddr(email_from)[1]

Una vez que tenemos el asunto y la dirección desde donde llegó el correo en las variables subject y from_address podemos pasar a crear el mensaje que informará nuestra ausencia.

En el envió de correo se suelen utilizar dos formatos, el texto plano o el formato HTML, lo mas recomendable es la combinación de ambos, es decir, un correo con su contenido en formato HTML e incluyendo también el formato en texto plano, para en caso de que el cliente no reconozca el formato HTML, pueda leer la versión en texto plano. Mailproc nos provee la función “send_email” con la cual podemos enviar mensajes solo en texto plano o en formato HTML y texto plano. Primero creamos nuestros mensajes:

text = "Hola, he recibido un mensaje desde su dirección (%s) con el asunto %s\ndesafortunadamente no podre darle respuesta hasta septiembre porque estoy de vacaciones\n\n Saludos." % (subject, from_address)
html = """\
<html>
  <head></head>
  <body>
    <p>Hola, he recibido un mensaje desde su direcci&oacute;n (%s) con el asunto %s<br>
       <br>
       desafortunadamente no podre darle respuesta hasta septiembre porque estoy de vacaciones<br>
       <br>
       Saludos.
    </p>
  </body>
</html>
""" % (subject, from_address)

Y enviamos el correo:

self.send_email(mail_server,
                    "micorreo@dominio.com", from_address,
                    subject, text, email_html=html)

El primer parámetro de la función “send_email” es la dirección del servidor de envío de correo o SMTP, en ocasiones coincide con la dirección del imap (como es el caso de este tutorial) pero en otras no, y suele ser algo como “smtp.dominio.com”. El segundo parámetro es la dirección de quien envía el correo, osea, nuestra dirección y el tercero y cuarto parámetro es el asunto y el mensaje en formato de texto plano.

La función “send_email” también admite varias opciones, como son:

email_html: El cuerpo del mensaje en formato HTML
email_encode: la codificación de los caracteres, por defecto “UTF-8”
log: Información para incluir en los log al enviar el correo
smtp_port: El puerto de conexión del servidor SMTP
smtp_username: Nombre de usuario para autenticarse en el servidor SMTP
smtp_password: Contraseña para autenticarse en el servidor SMTP
use_ssl: Usar ssl para la conexión, por defecto “False”

Luego de esto, ya tenemos el código necesario para el funcionamiento de nuestro autoresponder, es recomendable encerrar el código de la función en una clausula try: except para que informe debidamente en los log si ocurre algún error:

try:
    # código de la función aquí
except Exception, e:
    self.log('ERROR', str(e))

Solo quedaría decirle al cron que ejecute el fichero mailproc.py cada, por ejemplo, un día, o una hora, o un minuto, o el tiempo que estimemos conveniente, y nuestro autoresponder escrito con mailproc, se encargará de informarle a todo el que nos escriba que no estamos disponibles.

El código completo de nuestro pequeño autoresponder esta aquí, solo hay que descomprimirlo dentro de la carpeta services de mailproc.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*