
La gestión de un número elevado de correos electrónicos a veces se convierte en un quebradero de cabeza para muchas empresas. Os voy a contar un caso muy particular que he vivido en la mía y os voy a exponer detalladamente cómo he podido solventarlo.
Reenvío de correos sin adjuntos: el gran problema.
Nosotros tenemos un gran cliente que nos envía a una única cuenta de correo montones de mails. Y cuando digo montones, me refiero a literalmente varios cientos al día. No podemos indicarles que envíen los correos de una temática concreta a un empleado y otra temática a otro. Es su forma de trabajar y… bueno… el cliente siempre tiene la razón.
El departamento que se encarga de estos correos, dada la saturación que supondría separar cada correo de forma individual, lo que estaba haciendo hasta ahora era echar balones fuera y reenviar absolutamente todo ese correo a todos los encargados de tramitarlos (que son unos 15). Cada uno coge el correo que le interesa y el resto los puede ignorar. No podemos crear una cuenta de correo única imap (en la que todos leerían el correo de la misma fuente y así no se duplicarían correos) porque cada uno de esos encargados quiere tener el control de lo que tiene leído y lo que no. No se puede automatizar el envío sólo a determinados encargados porque no hay reglas que se puedan definir para enviar el correo a uno o a otro.
Pero el mayor problema y lo que ha motivado toda la odisea que os plantearé en el artículo son los archivos adjuntos. Todos esos correos tienen archivos adjuntos. Y no son pequeños. Estamos hablando de entre 5 y 15 megas por adjunto.
Bueno... un archivo de 15 megas se puede enviar sin problema por correo. Tampoco es un drama.
Sí que lo es, y bien grande. Porque si se recibe un correo de 15 megas y se reenvía a 15 personas, el espacio en disco necesario en el servidor para ese único correo son 225 megabytes. Repito: un único correo 225 megabytes. Si recibimos sólo 10 correos de este tipo el mismo día, estaríamos hablado de 2.25 GB de espacio en disco ocupado en un día. Esto sostenido en el tiempo es completamente insostenible, salvo que estés dispuesto a gastarte un dineral en espacio de correo.
Uy... pues es verdad. Visto de este modo sí que es un problema infernal. Pues ya me dirás cómo se puede resolver esto.
Mira, llevamos tiempo dándole vueltas a la idea de que esto podría solucionarse en parte si se pudieran reenviar los correos a todos los encargados sin los adjuntos. Nuestro cliente, en su portal, nos permite descargar los adjuntos de esos correos sin problema. Los correos quedarían como un aviso (porque en el cuerpo del correo se explica todo lo necesario) y si al encargado final le llega un correo del que le interesa un adjunto puede descargarlo sin problema.
Ah, pues ya tienes la solución. Esto ha sido todo, dadle a like, suscribíos y...
No tan rápido, Usuario Anónimo. Reenviar correos de forma automática sin incluir adjuntos no es algo trivial. Los filtros habituales de los proveedores de correo gratuítos (gmail, outlook, etc…) no lo permiten. Tampoco los proveedores de correo de pago como dinahosting.

Venga. Vale. Te lo compro. Pero olvídate de reenviar esos correos desde el propio servidor del correo. Si usas el gestor de correo de Microsoft Office (Outlook) tienes mil opciones distintas para crear reglas de correo. Puedes crear una regla de correo que te reenvíe el correo hacia dónde quieras y a lo mejor...
Ojalá fuese así de sencillo. Y efectivamente: las reglas de Outlook te permiten hacer mil diabluras para automatizar acciones con el correo que te ha entrado. Fíjate en esta imagen:

Sin embargo y si te fijas en las opciones que nos da Outlook no hay nada que, de forma automatizada, permita reenviar un correo quitándole el archivo adjunto. Además usar Outlook para esta tarea implicaría dejar encendido las 24 horas del día un ordenador con el Outlook abierto, cosa que es poco elegante.
Madre mía. ¿Y no habrá algún software que permita hacer esto?
A ver… por haber, hay algunas opciones, como make o Zapier (que no son aplicaciones que puedas instalar, sinó servicios web), ImprovMX, Mailrise o Modoboa. Pero cualquiera de estas opciones se me antojan, o bien muy caras si quieres automatizar una gran cantidad de correos, o demasiado complicadas de implementar para lo sencillo que es lo que queremos (al fin y al cabo sólo queremos reenviar correo electrónico sin complicarnos demasiado). No existe ninguna aplicación en el mercado que me convenza al 100% para esta función. Así que ¿Qué se hace cuando no hay ninguna aplicación que haga lo que quieres?
Esa me la sé. Decirle al jefe que es imposible y que deje de dar el coñazo.
Ehhh… a ver… yo me refería a hacer la aplicación uno mismo. Así que me he remangado y he parido este pequeño ñordo que quiero compartir con todos vosotros: os presento a P.E.R.C.E.B.E. (Programa de Envío y Redirección de Correos Eliminando Basura Electrónica).

¿Qué? ¿Que has hecho tú mismo un programa? ¿Y lo has llamado... cómo? ¡Dios mío! ¡Qué ida de olla más grande! ¿Seguro que no has abandonado la medicación?
No te creas que es tan ida de olla. Primero os voy a explicar un poco cómo funciona y luego os explicaré cómo ponerlo en marcha
Cómo funciona y por qué dos programas en lugar de uno.
Lo primero que toca hacer cuando te enfrentas a elaborar un programa es hacer un pequeño esquema de todo lo que quieres conseguir, y aquí teníamos un dilema serio: queríamos que fuese extremadamente sencillo de usar (no voy a ser yo el usuario principal, y los usuarios finales, los que en su día a día pueden querer modificar su funcionamiento, no tienen grandes conocimientos de informática) pero también queríamos que residiera una parte del programa en un servidor.
Espera... ¿Que? ¿En un servidor? ¿Pero si es algo tan sencillo por qué hace falta correr esto en un servidor?
Porque es un programa que debe estar corriendo las 24 horas del día. Si llega un correo el sábado por la tarde, cuando no hay nadie trabajando, el programa debe coger ese correo y reenviarlo a la cuenta que corresponde sin tener que esperar a que haya alguien que encienda su ordenador. Y por definición un ordenador que está siempre encendido las 24 horas del día corriendo un programa que da servicios a otros usuarios es un servidor.
¡¡Pero nuestros lectores seguramente no tengan un servidor en casa!!
¿Estás seguro? Nos hemos hartado de publicar en los artículos anteriores decenas de tutoriales para montar servidores en Raspberrys. El programa que os voy a ofrecer necesita que instalemos una «cosa» en un servidor de algún tipo (Idealmente un servidor linux). Pero el programa es tremendamente ligero. Tan tan ligero que nuestro servidor puede ser perfectamente una Raspberry que estará casi ociosa mientras lo ejecuta.
Pero ¿Y los que no tengan ningún equipo con Linux?
No hay problema. He hecho versiones del servidor de P.E.R.C.E.B.E. para Windows.
Aún así no me parece tan sencillo. ¿Cada vez que haya que cambiar algo hay que hacerlo directamente en el servidor? ¿Vas a hacer que los usuarios tengan que entrar en el servidor a través de una página web? ¿Cómo se usa esto?
Se puede usar de una forma muy sencilla: en el equipo de la persona (o las personas) que necesiten modificar el comportamiento de P.E.R.C.E.B.E., simplemente hay que ejecutar un pequeño programa (un archivo .exe) que te dará todas las opciones de configuración del servidor. Desde ahí configuras todo lo que necesitas (Cuentas de correo, reenvíos, etc..) y cuando terminas de configurar todo, simplemente apagas el programa y te olvidas. El servidor quedará haciendo todo el trabajo. Aunque apagues tu equipo el servidor seguirá reenviando correos.
Resumiendo: tienes un programa en el servidor al que no haces ni caso pero que hace todo el trabajo y desde el cliente lo configuras y revisas cuando haga falta.
Entiendo. ¿y por qué le das énfasis al tema de perder la conexión a internet o que se vaya la electricidad?
¡Porque ya me ha pasado! Te explico:
Gestión «paranoica» de problemas

Cuando «parí» este engendro, tuve mil dudas, así que anduve con pies de plomo para comprobar que absolutamente todo el correo que se quiere reenviar se reenvía correctamente. De hecho el sistema tiene un control de logs integrado para revisar si está haciendo bien su trabajo. Así que me planteé qué podría pasar si el sistema recibe un correo, pero en el intervalo entre que se recibe y se envía a los destinatarios deseados se va la luz o internet.
Lo que he hecho para solucionarlo es lo siguiente: antes de enviarlo, el correo se guarda en un archivo intermedio. Si se pierde la conexión o incluso si hay un apagón y nos quedamos sin luz, al reiniciar el equipo o cuando el sistema vuelva a tener conexión, el servidor de P.E.R.C.E.B.E. reanudará el envío de correos en el punto en el que lo ha dejado. En ese caso el sistema va a reintentar el envío durante varios días a intervalos de tiempo cada vez mayores.
Bueno... ¡Es que te pones en cada caso! Entre que llega el correo y el sistema lo envía no debería pasar mucho tiempo ¿No?
Eso va a depender del número de destinatarios. El sistema no crea un único correo y lo vomita tal cual a todos los destinatarios. Lo que hace es un correo personalizado para cada destinatario y cada uno de esos correos los envía en un intervalo de 3 segundos entre uno y otro. Se hace así para evitar que los correos se cataloguen como spam. Además la cabecera y la elaboración de cada correo está muy cuidada para que no haya problemas en el envío. Esto conlleva que el programa sólo pueda enviar un máximo de 20 correos por minuto. Puede parecer poco, pero aunque parezca contraintuitivo es lo que necesitas. Enviar correos poco a poco en lugar de todos de golpe evita que los proveedores de correo (gmail, outlook, etc…) te bloqueen la cuenta por creer que estás enviando spam.
Marca especial en el correo para evitar bucles de reenvíos.
También pensé que puede que uno de los destinatarios tenga configurado en su equipo un correo de vacaciones (típica respuesta automática para decir que no está en la oficina). Si alguna cuenta tiene configurado algo así y no hay ningún tipo de control, puede llegar a producirse un bucle peligroso. Imaginad la situación:
- Recibimos un correo con un asunto determinado que cumple los criterios para ser reenviado.
- Uno de los destinatarios tiene una respuesta automática. Su servidor de correo responde al envío poniendo «Re:» delante del asunto para que sepamos que es una respuesta.
- P.E.R.C.E.B.E. detecta ese «re:», pero como el resto del asunto es igual, puede que la regla de correo se siga cumpliendo, por lo que se vuelve a reenviar a todas las personas.
- El usuario que tiene respuesta automática de vacaciones vuelve a enviar un correo con otro «Re:», y nuestro sistema lo vuelve a enviar… y así hasta el infinito.
Para evitar estos problemas los correos que manda percebe tienen «PCB:» marcado en el asunto. Si recibe un correo con ese asunto el correo ya no se reenvía (supone que es una respuesta automática de otro usuario), pero esa marca la he puesto usando una combinación de letras griegas. Así si por casualidades del destino algún correo se debe reenviar con ese asunto (usando el alfabeto latino) , no va a ignorarlo y se reenviará sin problema.
Múltiples reglas y cuentas de correo.
Por cierto… este programa no sólo te permite crear una regla de correo y que se aplique correctamente. Te permite crear todas las reglas que quieras, incluso sobre cuentas de correo distintas (puedes especificar reglas distintas a cuentas distintas). Cada minuto escaneará cada una de las cuentas y si hay correo que reenviar lo hará sin rechistar.
Vaya... pues sí que has pensado cosas. Acaba de empezar el año y creo que ya has cubierto el cupo de cosas que puedes pensar hasta navidades.
Distribución del programa y su código fuente
Pero lo mejor de todo es que además lo voy a hacer disponible a todos vosotros de forma gratuita. Podéis descargarlo y usarlo cómo veáis conveniente. Incluso, si queréis, os dejo este enlace para que podáis revisar el código fuente del programa
¿Pero quién va a ser tan friki como para revisar tu código fuente?
Siempre está bien dar la posibilidad de que la gente pueda revisarlo. Quiero daros la confianza de que el programa sólo hace aquello que digo (hoy en día en internet se ve cada cosa…). Y oye… a lo mejor incluso alguien detecta algún fallo grave y me ayuda a mejorar el programa.
En fin… vamos a ponernos a instalar el servidor. Vais a alucinar con lo sencillo que va a ser, pero no sin antes hacer una aclaración importante.
Precaución antes de instalar el cliente de P.E.R.C.E.B.E.
Antes de que empezar a trabajar con P.E.R.C.E.B.E. debo advertiros una cosa: En cuanto configuréis una cuenta de correo, el programa borrará todo el correo que hay en ella.
¿Cómo? ¿Y eso por qué? Mi no entender
Aunque parezca contraintuitivo tiene sentido (y también una solución sencilla). El tema es que Percebe va a estar interfiriendo en vuestra cuenta de correo todo el rato (cada minuto va a estar leyendo correos). Si hay algún problema como un corte de luz, puede que P.E.R.C.E.B.E. no sepa dónde se ha quedado y por qué correo continuar los reenvíos (salvo que haga en el servidor un registro enorme que deba consultar y que haría mucho más lento el programa).
Así que hay que darle una cuenta de correo nueva, completamente vacía para poder trabajar. Cuando reciba un correo, si el correo cumple los criterios, lo reenvía, lo deja registrado en sus logs, y por último lo elimina de la cuenta de correo. Si el correo que recibe no cumple los criterios, entonces no le interesa y lo borra directamente. En cualquier caso, reenvíe el correo o no lo reenvíe, P.E.R.C.E.B.E. va a borrar cualquier correo que entre en esa cuenta, por lo que va a mantener esa cuenta de correo siempre vacía.
Así, si hay un problema como un corte de luz, este sistema no sólo permite enviar todos los mensajes que entren a partir del momento en que vuelva la luz, sino que va a poder seguir dónde lo dejó y reenviará todos los mensajes que han entrado durante el corte.
¡Ostras! ¡Pero yo necesito reenviar correo de mi cuenta personal! Si esto me borra todos los mails de mi cuenta no me sirve.
Pues no pasa nada. Creas una nueva cuenta de correo y en las opciones de tu cuenta original, reenvías absolutamente TODO el correo a la cuenta nueva (la que va a usar P.E.R.C.E.B.E.). Reenviar todo el correo, tal cual, con adjuntos y todo, es algo que permite hacerlo sin problema cualquier proveedor de e-mail. Percebe en cuanto reciba tus reenvíos ya los gestionará tal y cómo te interesa. Hazme caso: en mi empresa estamos haciendo esto mismo en algunas cuentas y no da ningún problema a la hora de hacer el segundo reenvío (porque P.E.R.C.E.B.E reescribe de nuevo todo el correo, no hace un reenvío sin más).
Instalador de P.E.R.C.E.B.E. server.
Tal y cómo os he dicho, para mi lo más lógico es instalar el servidor de P.E.R.C.E.B.E. en un servidor linux. El programa es un único archivo y él sólo se ocupa de crear el archivo de configuración, los logs y los archivos con las colas de reintentos. Sin embargo he querido por todos los medios que la instalación fuera insultántemente sencilla, así que me he matado para que ejecutando un único comando se instale todo lo necesario en vuestro servidor.
Instalación sobre linux.
Si tenéis un servidor ubuntu o debian sobre una máquina X64 (una máquina virtual o un ordenador o servidor con procesadores intel o amd), o incluso un pequeño servidor ARM (Raspberry Pi) únicamente tendréis que introducir esta línea en vuestro terminal y dejar que se instale él solito.
curl -s https://programas.flopy.es/percebe/percebe.sh | sudo bash
¡Dios Mío! ¡Es la instalación más friki que he visto en mi vida! ¡Has batido un nuevo récord!
No está de más tener un poco de sentido del humor. En todo caso esto ya deja instalado el servidor de P.E.R.C.E.B.E., así que vamos a ver cómo se instala el cliente.
Espera, espera. Para el carro. ¿No nos vas a explicar nada de cómo se usa esto?
Ya te dije que mi intención es que esto sea lo más sencillo posible para el usuario final y en general para todos. Así que lo he hecho tan sencillo que en el servidor no hace falta hacer absolutamente nada más. Simplemente tener corriendo el servicio que acabamos de instalar. Ah, y si después de probarlo consideráis que el programa no es digno de sostener en alto vuestro Mjölnir, lo podéis desinstalar con este otro comando.
curl -s https://programas.flopy.es/percebe/adiospercebe.sh | sudo bashPor si alguien se pregunta qué rayos está haciendo el programa mientras está en nuestro servidor, y como no tengo nada que esconder, os dejo en este enlace el código fuente del programa (está escrito en python).
Instalación sobre Windows
Aunque os insista una y otra vez que correr algo así es preferible hacerlo sobre Linux, voy a tener consideración y os voy a dejar en este enlace exactamente el mismo programa (el servidor de P.E.R.C.E.B.E.) pero compilado para que funcione sobre Windows. Posiblemente al ejecutarlo os salga alguna advertencia de seguridad. Os hablaré de ella en el apartado del cliente de Percebe, porque es el mismo tipo de advertencia.
Pero no es un programa de instalación. Lo ejecuto y parece que no hace nada.
¡Que es exactamente el mismo comportamiento que he logrado con el programa para Linux! No consume casi recursos y simplemente se queda funcionando en el fondo. No hay ventanas, no hay interfaz. Sólo el programa sin molestar otros procesos. No he hecho ningún instalador para esta versión, pero podéis consultar en este artículo si queréis convertir el servidor de P.E.R.C.E.B.E en un servicio que arranque automáticamente con Windows.
Cliente de P.E.R.C.E.B.E.
Para usar el cliente de P.E.R.C.E.B.E. váis a necesitar descargar el programa cliente desde este enlace. Posiblemente la primera vez que lo ejecutéis, os salga una advertencia de este tipo:

Esto sucede porque no he firmado electrónicamente el programa. No le deis mayor importancia. Pulsad sobre «Más información» y la pantalla os cambiará a esta otra.

Pulsad sobre «Ejecutar de todas formas» y ya tendréis el cliente de P.E.R.C.E.B.E. corriendo.
Como podéis ver, el programa es un ejecutable que os creará un par de archivos en la carpeta dónde lo estéis ejecutando (podéis llevar el ejecutable y los archivos al lugar de vuestro disco que mejor os parezca). El programa tiene este aspecto.

Ya veo. ¿Y para qué sirve este botón que pone Modo Percebeiro Pro? A ver... ¡¡¡Ahhh!!! No me lo puedo creer.
Ehmmm… Mejor vamos a ver otras opciones más interesantes (y no te preocupes por el modo «Pro», que el programa es y será completamente gratuíto, libre y sin limitaciones).
Lo primero que debes hacer es poner la ip del servidor dónde instalaste el P.E.R.C.E.B.E server en el recuadro correspondiente. Una vez hecho esto, puedes pulsar en «probar conexión» y si todo va bien se indicará con una ventana como ésta.

Vale. Pero ¿por qué tienes un recuadro para seleccionar el puerto, si no hemos configurado nada de eso en el servidor?
Tiene su lógica. En el 90% de los casos el usuario no va a tener que tocar el puerto. Pero puede darse el caso de que alguien quiera tener varios percebes instalados a la vez en el mismo servidor. Imagina un departamento que quiera enviar unos correos y otro departamento diferente que quiera enviar otros, pero no te interesa que ambos departamentos sepan las credenciales o los reenvíos del otro. Si se quiere hacer esto, es tan sencillo como descargar a mano el servidor de percebe, correr todas las copias que se quiera desde carpetas diferentes (en el propio servidor) y modificar su archivo de configuración (config.json) con puertos diferentes en cada copia. Los clientes se configurarían con puertos diferentes cada uno y serían completamente independientes el uno del otro.
Madre mía, has pensado en todo.
Una vez que estás conectado a P.E.R.C.E.B.E. server, pinchamos en «Nueva cuenta» para configurar la cuenta desde la que vas a recibir los mensajes y luego reenviarlos. Os marco el orden por el que deberíais revisar todo.

En la pestaña de «Configuración de cuenta» ponemos todos los parámetros que necesitamos para configurar el correo (nombre de la cuenta, servidores imap y smtp con su configuración) y por último pulsamos el botón de «guardar configuración». Revisad que la casilla de «Cuenta activa» esté activada. Eso garantiza que el Percebe estará revisando el correo de esa cuenta contínuamente.
Podéis añadir todas las cuentas que necesitéis. Cuando tenéis marcada en el desplegable «Cuenta» una cuenta en concreto, en la pestaña «reglas de reenvío» veréis las reglas que tenéis configuradas en esa cuenta para reenvia correo. Recordad que cada cuenta tiene sus reglas y que si varias cuentas tienen las mismas reglas, debéis repetir la misma regla en cada cuenta por separado.
Podéis crear una nueva cuenta pulsando en el botón «nueva regla». En «Información general» le ponéis un nombre a la regla. Marcadla como «activa» para que la regla funcione y seleccionad si queréis que se reenvíen o no archivos adjuntos (Esta es la parte mágica del programa. No he visto nada que permitiera gestionar los adjuntos de forma tan sencilla).

Luego, simplemente cubrimos campos. Si queremos que se reenvíen los correos de un remitente en concreto, ponemos su dirección en el campo «remitentes». Si queremos que reenvíe correos con determinadas palabras en el asunto, ponemos las palabras deseadas en el campo correspondiente. Y si queremos reenviar correos de una persona pero sólo los que tengan una palabra o frase en concreto, cubrimos los dos campos.
Por último cubrimos el campo «Destinatarios del Reenvío» con todas las direcciones a las que queremos enviar los correos. Pueden ser todas las que queráis. Y por supuesto pulsad el botón «guardar configuración» para que empiece a reenviar correos.
Por cierto… no copiéis y peguéis direcciones de otros programas o páginas web. Aunque no lo parezca, seguramente vais a pegar trozos de código que pueden interferir en el programa. Escribid las direcciones a mano o pegadlas desde un block de notas, pero jamás cojáis campos de un excel, word o outlook. No es buena idea.
Gestión de errores
Si os fijáis, las dos últimas pestañas nos dan información. La pestaña «Registro de reenvíos» nos muestra todos los reenvíos que ha hecho el programa. La pestaña de «Registro de errores» nos hace lo propio con cosas que no han salido bien y es muy útil para identificar problemas (si no ha podido acceder a la cuenta de correo, si tiene problemas con la conexión a internet, etc…). Estas dos pestañas unidas al sistema que tiene el programa para sortear problemas de conexión son una herramienta muy valiosa para saber al momento qué puede producir un fallo.
Futuro de P.E.R.C.E.B.E.
Y en principio esto es todo. Desde que ha sido creado, rara es la semana que no le he tenido que añadir alguna nueva opción a este invento, así que no descarto ponerle más características.
A ver... es que realmente se le pueden poner más condiciones al envío de correos. Outlook tiene una lista tremendamente extensa.
Sí, sí… por supuesto. Pero mi objetivo era primero cubrir las necesidades más acuciantes que teníamos. Tengo en mente algunas modificaciones que posiblemente implemente dentro de poco, pero creo que al menos el proyecto está lo suficientemente maduro como para distribuirlo al público en general (doy fe que en el día a día funciona sin problemas).
Además soy de los que cree que cuando a un programa le pones demasiadas cosas se vuelve complicado y poco útil. Prefiero hacer un programa muy simple que haga su función bien en lugar de uno con mil opciones de configuración y que líe a los usuarios.
En fin… ¿Qué os parece este proyecto? ¿Podríais sacarle algún uso? Estaré encantado de leer vuestros comentarios.





Deja una respuesta