Product
Uso de expresiones regulares para filtrar emails entrantes
Las expresiones regulares son una forma potente de filtrar y encontrar coincidencias de datos, pero la sintaxis cambia dependiendo de tu lenguaje de programación y caso de uso. Por ejemplo, una expresión regular que sigue una especificación de Javascript difiere de una que sigue Java o Python. Estos mismos contratiempos se aplican al usar expresiones regulares en los emails.
Aunque es probable que ya estés familiarizado con las expresiones regulares en el desarrollo de tus aplicaciones, haz un curso intensivo sobre cómo usarlas con Mailgun para filtrar los emails entrantes. También repasaremos la sintaxis y los casos de uso comunes para usar expresiones regulares con nuestra función de enrutamiento.
¿Qué son las expresiones regulares?
Solo para asegurarnos de que partimos de la misma base, aquí tienes un breve repaso sobre las expresiones regulares (regex o regexp). Una regex es una secuencia de caracteres que especifica un patrón de búsqueda en el texto. Puedes usar regex con algoritmos de búsqueda de cadenas para encontrar coincidencias en una base de datos, en un texto o en código HTML. Los casos de uso avanzados incluyen variaciones codiciosas (encontrar todas las coincidencias) o no codiciosas (encontrar la primera coincidencia y detenerse).
¿Cómo uso regex con Mailgun?
El email marketing es una conversación, y en Mailgun nos dedicamos a enviar emails. Pero espera, si se supone que es una conversación, ¿no necesitas también una forma de gestionar el email entrante?
¡Nos alegra que lo preguntes! Nuestra API de enrutamiento te permite aceptar, analizar y hacer POST o reenviar tus emails entrantes. Últimamente hemos trabajado para que Rutas sea aún más útil añadiendo la posibilidad de probar tus puntos de conexión de webhooks cuando quieres hacer POST de tus emails entrantes a tu aplicación. Sin embargo, nada de esto importa si no puedes filtrar eficazmente los emails entrantes.
A continuación, repasaremos algunos ejemplos de las formas más comunes de agrupar emails entrantes para su procesamiento. Estos métodos usan expresiones regulares que son muy potentes, pero con las que también puede ser complicado trabajar.
¿Qué especificación de regex usa Mailgun?
La notación regex para las Rutas está basada en la especificación de Python. Antes de profundizar en ejemplos específicos, queremos señalar un error común de los desarrolladores que empiezan a usar expresiones regulares:
- El asterisco (*) no es un comodín por sí solo en la sintaxis de las expresiones regulares.
- Para coincidir con cualquier carácter, debes usar un punto (.).
- Para coincidir con cualquier serie de caracteres, tendrías que usar un punto seguido de un asterisco (.*).
Sin más preámbulos, entremos en materia.
¿Cuáles son algunos ejemplos de uso de regex con Mailgun?
Estas son algunas de las expresiones regulares más comunes que vemos usar a la clientela al recibir mensajes. Esta lista solo rasca la superficie de lo que puedes hacer, pero esperamos que te sirva para reflexionar sobre el potencial de las expresiones regulares.
Para facilitar las cosas, hemos categorizado las expresiones en tres grupos:
- Coincidencias en variaciones del destinatario del email.
- Coincidencias en los encabezados de email.
- Encadenamiento de expresiones regulares para coincidir con varios atributos.
A continuación, profundizaremos en algunos ejemplos en las tres secciones siguientes.
1. ¿Cómo busco coincidencias con el nombre del destinatario de un email usando regex?
En esta sección, repasaremos algunas variaciones sobre cómo puedes encontrar coincidencias con el nombre del destinatario de un email usando regex.
¿Cómo puedo buscar coincidencias con un destinatario independientemente del nombre de dominio de su dirección de email?
Empecemos con un ejemplo no tan restrictivo. En esta sencilla regex, queremos encontrar a un destinatario concreto en cualquiera de los dominios cargados actualmente en la pestaña Dominios de Mailgun. Echa un vistazo al siguiente código de muestra:
match_recipient('^chris@(.*)
Recuerda que debes tener tus registros MX apuntando a Mailgun antes de que Mailgun acepte mensajes para ese dominio en particular.
¿Cómo puedo buscar coincidencias con un destinatario concreto cuya dirección de email es de un dominio específico?
A continuación, iremos un paso más allá. Seguimos queriendo encontrar a un destinatario concreto. Sin embargo, esta vez queremos encontrar a un destinatario específico en un dominio concreto, «Gmail.com».
match_recipient("^chris+(.*)@gmail.com$")
Mailgun configura nuestro servidor de email entrante para aceptar destinatarios con direcciones combinadas con el signo más (plus addressing). También podrías limitar el plus addressing usando la sintaxis del siguiente ejemplo.
¿Cómo puedo buscar coincidencias con varios destinatarios en un dominio específico?
Encontremos a más de un destinatario concreto con direcciones de email en un dominio específico. Echa un vistazo a la siguiente regex.
match_recipient('^(chris|blog|test)@example.com
¿Cómo puedo buscar coincidencias con cualquier destinatario en un dominio específico?
En este caso, queremos encontrar a todos los destinatarios de email con direcciones de email válidas en un dominio de nivel superior concreto. Se trata de una especie de filtro «catch-all» para un dominio en particular. Como advertencia, no debe confundirse con el filtro global catch-all que ofrecen las Rutas de Mailgun, donde se reenvían todos los emails recibidos.
match_recipient('^(.*)@example.com
¿Cómo puedo usar una captura con nombre para reenviar un mensaje a un destinatario externo?
En este caso de uso, queremos que Mailgun reciba y reenvíe un mensaje entrante a un dominio externo. Sin embargo, también queremos mantener al usuario en nuestro mapeo de usuarios.
Para ello, usamos una captura con nombre, que recordará al «usuario» y lo usará en la acción de reenvío. Echa un vistazo a la siguiente regex.
match_recipient('(?P.*?)@example.com') -> forward('g@externaldomain.com')
2. ¿Cómo busco coincidencias con encabezados específicos de un email usando regex?
Aquí repasaremos variaciones para encontrar coincidencias con encabezados concretos de un email entrante usando expresiones regulares.
¿Cómo puedo buscar coincidencias con un atributo «from» definido?
Empecemos con algo sencillo. Queremos que el enrutamiento se ejecute para cualquier email cuyo remitente sea «bob@example.com». Fíjate en que añadimos comodines (*) antes y después de la dirección de email. Esto se debe a que el campo «From» puede contener otros atributos. Por ejemplo, el nombre del remitente: «Mailgun Bob «.
match_header('from', '(.*)bob@example.com(.*)')
¿Cómo busco coincidencias con varias palabras clave definidas en la línea de asunto?
Si el email trata sobre conversaciones, las respuestas oportunas a las consultas urgentes son una forma excelente de mantener feliz a tu base de usuarios. En este caso, buscamos cualquier mensaje con un asunto que contenga «urgente» O «ayuda» O «lo antes posible». Buscaremos coincidencias con estas cadenas tanto en mayúsculas como en minúsculas.
Los comodines tanto al principio como al final detectan líneas de asunto que contienen nuestras palabras clave independientemente del resto del texto del asunto. Por ejemplo, este caso se activaría con un asunto que dijera: «¡Mi solicitud es urgente!».
match_header('subject', '(.*)(urgent|help|asap)(.*)')
¿Cómo puedo recopilar y redirigir los mensajes de spam entrantes a un buzón externo?
Mailgun ofrece un filtro de spam para los mensajes entrantes. Cuando determinamos que un mensaje es spam, inyectamos un encabezado especial. Puedes usar el enrutamiento para filtrar mensajes basándote en estos encabezados.
Aquí reenviamos el mensaje a un buzón externo para poder revisarlo más tarde. Echa un vistazo a la siguiente regex.
match_header('X-Mailgun-Sflag', 'Yes') -> forward('mbx@externaldomain.com')
3. ¿Cómo encadeno regex para coincidir con varios atributos?
Unámoslo todo. En esta sección, buscaremos coincidencias basándonos en varios atributos.
¿Cómo busco coincidencias con cualquier destinatario cuyo mensaje sea una respuesta?
En el siguiente ejemplo, queremos buscar coincidencias con cualquier destinatario cuya dirección de email sea de un dominio específico. Sin embargo, solo queremos enrutar los mensajes cuando sean una respuesta a nuestro hilo original. También podrías usar «Fw» para representar un mensaje reenviado.
match_recipient('^(.*)@example.com
¿Cómo busco coincidencias con cualquier destinatario, pero solo si el mensaje está en inglés?
En la regex a continuación, hemos creado un filtro «catch-all» para todos los destinatarios de un dominio específico. Sin embargo, solo enrutamos mensajes cuando el idioma del contenido es el inglés. Aprende a hacerlo basándote en la especificación ISO para los idiomas de contenido.
match_recipient('^(.*)@example.com
Más de Mailgun
Nuestra función de enrutamiento potencia tus envíos, pero también te ayuda a gestionar las conversaciones de los emails entrantes. ¿Te ha ayudado este tutorial a escribir expresiones regulares más efectivas para filtrar tus emails entrantes? Suscríbete a nuestra newsletter para no perderte más contenido útil como este.