Autoresponder simple con mailproc (I)

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 primera parte conoceremos a mailproc, y crearemos una plantilla para comenzar a escribir nuestro autoresponder.

Un autoresponder no es mas que una aplicación que da respuestas de forma automática a los mensajes recibidos, suele utilizarse para, por ejemplo, informarle a quienes intenten contactar con nosotros, que estamos de vacaciones y que no revisaremos el correo hasta el próximo septiembre. Si bien una aplicación de este tipo tiene mucha utilidad, también puede ser muy peligrosa, debido a que puede generar correos no deseados (spam) sobre todo cuando en el otro extremo de la comunicación existen mecanismos de respuestas automáticas, como por ejemplo, el de una lista de distribución.

Debido a las complicaciones que puede traer el uso de un autoresponder y a que tampoco se busca llegar a la forma óptima de resolver dicha tarea, declaro este tutorial meramente informativo, para describir las características de mailproc y como usarlo, si desea utilizar el resultado final, el cual no tiene implementada ninguna medida de seguridad, queda bajo su propia responsabilidad.

Regresando al microframework, veremos que nos brinda una serie de herramientas para facilitar la creación de tareas vinculadas al correo electrónico, como la obtención, el procesamiento, y el envió de mensajes además de proporcionarnos una capa de acceso a bases de datos y un sistema de trazas para seguir el comportamiento de nuestro servicio.

Lo primero que debemos hacer es descargarlo desde su sitio en github, o directamente desde el blog (la descarga desde el blog puede quedar desactualizada) una vez en nuestra PC, descomprimimos el fichero .zip.

La estructura del microframework es bien sencilla:

  • mailproc.py : Es el núcleo del microframework
  • services : Es la carpeta donde colocaremos nuestros servicios
  • database: Es la carpeta donde se creara la base de datos por defecto del microframework, si es que deseamos utilizarla
  • contrib: en esta carpeta se encuentran las herramientas y/o bibliotecas de terceros utilizadas por el microframework

Lo primero que vamos a hacer es crear la plantilla para nuestro primer servicio, así que abrimos la terminal, y nos movemos hasta la carpeta del microframework, una vez ahí, le decimos que nos cree un nuevo servicio llamado “autoresponder simple” con el comando:

python mailproc.py -a 'autoresponder simple'

Una vez hecho esto, tendremos dentro de “services” una carpeta llamada “autoresponder_simple” con un fichero “service.py”, que contiene lo siguiente:

# -*- coding: utf-8 -*-

from mailproc import MailProc

__service_name__ = 'autoresponder simple'
__service_version__ = '0.1'
__service_log__ = 'CMD' # change to 'DB' for production

# mail server config
mail_server = ''
mail_user = ''
mail_password = ''

class AutoresponderSimple(MailProc):

    def __init__(self):

        # init framework parent class
        MailProc.__init__(self)

        # service info
        self.__service_name__ = __service_name__
        self.__service_version__ = __service_version__

        # enable logging
        self.set_log_type(__service_log__)
        self.enable_log()

        # instance database and default logging tables and functions
        self.db = self.data_connect()
        self.instance_tables(self.db)

    def run(self):
        mails = self.get_new_mails(mail_server, mail_user, mail_password, use_ssl=False)
        self.process(mails, self.action)

    def action(self, mail):
        # define actions for each new email
        print mail

¿Y que significa esto?. Bueno, las primeras líneas son bastante claras:

__service_name__ = 'autoresponder simple'
__service_version__ = '0.1'
__service_log__ = 'CMD' # change to 'DB' for production

Son variables que almacenan información del servicio, como el nombre, la versión, y que mecanismo de log vamos a utilizar, si vamos a hacerlo hacia la linea de comando (CMD) bueno para cuando estamos desarrollando y haciendo pruebas, o hacia la base de datos (DB)

mail_server = ''
mail_user = ''
mail_password = ''

Almacenaran los valores de nuestro servidor de correos, la dirección, el nombre de usuario y la contraseña, se utilizará el protocolo IMAP para la conexión, así que le daremos la dirección que utiliza dicho protocolo, casi siempre esta dada por imap.dominiodemicorreo.com

Las líneas:

self.db = self.data_connect()
self.instance_tables(self.db)

Crea una conexión a la base de datos (SQLITE en la carpeta database) la primera línea, e instancia las tablas para los registros (logs) la segunda.

Para el trabajo con las bases de datos, se usa la capa de abstracción pydal, la cual es capaz de trabajar con mas de 10 gestores de bases de datos distintos, para conectarse con una base de datos mysql, por ejemplo, se utilizaría la siguiente línea

self.db = self.data_connect(connection="mysql://usuario:contraseña@direccion/nombredelaBD")

Se puede obtener mas información acerca del uso de pydal en esta dirección, verán que es posible definir nuevas tablas y consultar la BD sin necesidad de escribir SQL.

La función “run” será la primera en ejecutarse al ser llamado nuestro servicio, y la línea:

mails = self.get_new_mails(mail_server, mail_user, mail_password, use_ssl=False)

no hace mas que obtener correos nuevos que han llegado a nuestra cuenta utilizando el protocolo IMAP, acepta además los siguientes parámetros:

  • use_ssl : Por defecto True, si el servidor requiere una conexión por SSL
  • imap_port : el puerto de la conexión, si es necesario, por defecto se buscan los puertos estandarizados para dicha conexión.
  • get_msgs_type : expresión para la obtención de los correos, por defecto “(UNSEEN)” para obtener los correos no vistos
  • delete : por defecto “False”, si es verdadero elimina los correos obtenidos del servidor

La línea:

self.process(mails, self.action)

Hace una llamada a la función “process”, esta es una función especial que por si sola no hace nada, el primer parámetro es una lista, y el segundo una función, la cual se va a encargar de procesar uno a uno los valores de la lista, en este caso, la función “action”, va a mostrar en la terminal cada uno de los correos obtenidos.

Bien, en esta primera parte del tutorial hemos conocido que es un autoresponder, el microframework mailproc y cómo crear una plantilla para nuestros servicios además de cuales son sus partes principales. En las próximas entradas escribiremos nuestro autoresponder y veremos como hacer que mailproc chequee los nuevos mensajes de forma automática.

Deja un comentario

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

*