Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

Validación del destinatario: Ejemplos del código de verificación por correo electrónico

Correo electrónico

1 min read

Validación del destinatario: Ejemplos del código de verificación por correo electrónico

Correo electrónico

1 min read

Validación del destinatario: Ejemplos del código de verificación por correo electrónico

La validación de destinatarios de SparkPost ya está disponible tanto para los clientes existentes de SparkPost como para los nuevos clientes que no envían. Utiliza un análisis impulsado por datos en miles de millones de eventos de rebote, entrega y compromiso diariamente para entrenar nuestro algoritmo, ofreciéndote una de las herramientas de validación de correo electrónico más potentes impulsadas por datos en el mercado, para que puedas enviar correos electrónicos de manera más inteligente.

SparkPost Recipient Validation ahora está disponible tanto para los clientes existentes de SparkPost como para los nuevos clientes que no envían. Utiliza un análisis poderoso basado en datos sobre miles de millones de eventos de rebote, entrega e interacción diariamente para entrenar nuestro algoritmo, brindándote una de las herramientas de validación de correo electrónico más potentes del mercado, para que puedas enviar correos electrónicos de manera más inteligente.

Este artículo explica cómo puedes aprovechar al máximo los datos que recibirás de vuelta en cada destinatario validado. Verás que clasificamos las direcciones como "válidas", "arriesgadas", "neutras", "no delivery" y "error_tipográfico". Te damos un código de "razón" y también un "did_you_mean" para errores tipográficos conocidos en direcciones.

API requests

En la aplicación web de SparkPost, puedes arrastrar y soltar una lista completa para validación. También puedes usar el API para validar direcciones individuales, de modo que puedas integrar la validación directamente en tu flujo de trabajo de entrada de direcciones.

Hace un tiempo creamos una herramienta de línea de comandos de Python utilizando este API. Hablamos sobre lo que deberíamos hacer para otros idiomas – ¡y aquí estamos! Vamos a empezar.

Esta carpeta del repositorio de Github tiene ejemplos de llamadas de la API de Validación de Recipientes en funcionamiento en alrededor de una docena de idiomas diferentes. Intentamos cubrir los idiomas aplicables más populares.

La forma común de trabajar a través de todos estos ejemplos es:

  • Obtén tu clave del entorno variable SPARKPOST_API_KEY

  • Realiza una llamada al API a /api/v1/recipient-validation/single/ para validar un destinatario

  • Recibe de vuelta una cadena de respuesta, que contiene datos formateados en JSON con el resultado

  • Imprime el resultado

SparkPost tiene bibliotecas para algunos, pero no todos los idiomas cubiertos aquí. Elegimos escribir estos ejemplos de forma “nativa” en su lugar, para poder a) cubrir más idiomas, b) mostrar cuán simple puede ser el código subyacente, y c) permitirte ver claramente las similitudes y diferencias entre los idiomas.

Bash / Curl

Esto gana el premio al código más corto: simplemente utiliza la herramienta de línea de comandos "curl" para hacer la solicitud e imprimir la respuesta directamente en la terminal. Puedes ver que la salida es una cadena, que contiene JSON; en realidad, no analizamos los atributos individuales del resultado.

Esto gana el premio al código más corto: simplemente utiliza la herramienta de línea de comandos "curl" para hacer la solicitud e imprimir la respuesta directamente en la terminal. Puedes ver que la salida es una cadena, que contiene JSON; en realidad, no analizamos los atributos individuales del resultado.

Esto gana el premio al código más corto: simplemente utiliza la herramienta de línea de comandos "curl" para hacer la solicitud e imprimir la respuesta directamente en la terminal. Puedes ver que la salida es una cadena, que contiene JSON; en realidad, no analizamos los atributos individuales del resultado.

PHP

El confiable PHP tiene algunas formas diferentes de realizar llamadas API HTTPS. Aquí elegimos usar curl_setopt y curl_exec. (https://www.php.net/manual/en/function.curl-exec.php)

Si prefieres HTTP_Request2 o pecl_http, entonces Postman tiene un generador de código incorporado que puedes usar para crear ejemplos similares: solo configura una solicitud GET y usa el botón “Code”.

Python

Esto utiliza el popular módulo requests, que es de alto nivel y, por lo tanto, fácil de usar. Este ejemplo verifica el código de estado devuelto, convierte el JSON de resultados nuevamente en un objeto diccionario de Python y imprime el objeto resultante en lugar de solo una cadena.

Si prefieres la biblioteca integrada http.client, Postman también puede generar código para eso; no es mucho más largo.

Node.js

Hay muchas diferentes bibliotecas HTTP(S) de node.js. Comencé con el paquete más antiguo request (usando una función de callback), pero está en desuso y ya no se mantiene activamente. Elegí el paquete más nuevo axios (usando promises).

Postman también te puede dar un ejemplo nativo de Javascript y Unirest, en caso de que prefieras esos.

Debido a que este código necesita acceso a tu clave API, recomendamos encarecidamente llamar a nuestra API desde tu servidor, nunca desde el lado del cliente (navegador/dispositivo móvil).

Go

Go se esfuerza por una filosofía de "una buena manera" de hacer algo; en este caso, utilizando las bibliotecas "con pilas incluidas" integradas net/http, encoding/json y otras.

La longitud se debe principalmente a las cláusulas explícitas de verificación de errores if err != nil {} en todas partes (sin excepciones LOL).

También declaramos la estructura del objeto de resultados con etiquetas de campo, para permitirnos "desempaquetar" la cadena de JSON devuelta. Superponemos las etiquetas "results" y "errors" para permitir ambos tipos de retorno.

Me gusta la velocidad, la seguridad de tipos y la claridad de Go, incluso si el código es más largo que nuestros ejemplos anteriores.

C#

No estoy muy familiarizado con C# – para mí, se parece bastante a Java, más que a C. Pude armar esto siguiendo ejemplos mostrados en la biblioteca de solicitudes System.Net.Http.

Postman puede generar automáticamente código de ejemplo utilizando RestSharp, si prefieres eso.

Ruby

This was my first attempt at Ruby code; I used the Net::http library, and followed este ejemplo (que resulta ser muy parecido al código que Postman auto-genera).

Me encontré con una peculiaridad del lenguaje / biblioteca que vale la pena explicar. Simplemente configurar usando un URI que comienza con “https://” no es suficiente, tienes que establecer específicamente http.use_ssl = true

Sin esto, tu código intentará una solicitud en el puerto 443, pero sin usar SSL/TLS (es decir, en texto plano), y SparkPost rechazará la autorización de la solicitud. No intentes esto en casa, porque tu clave de API está en el encabezado de Autorización. Esta característica del lenguaje / biblioteca me pareció insegura.

Java

No he escrito ningún Java serio antes, pero fue fácil armar esto siguiendo el enfoque general utilizado en la biblioteca SparkPost para otras llamadas GET.

Por cierto, usar VS Code como mi editor / depurador funcionó muy bien para todos los lenguajes aquí, dándome resaltado de sintaxis, depuración paso a paso / visualización de variables, etc. The InputStreamReader y BufferedReaderconstructos son similares a (y supongo que fueron copiados por) Go.

C / C++

Esto fue un viaje por el carril de la memoria, ya que escribí mucho código en C en la década de 1990, algunos todavía funcionan profundamente en redes de telecomunicaciones en algún lugar. Dado que la historia de C es anterior a la Web moderna, no es sorprendente que el soporte de bibliotecas sea una tarea manual. Necesitamos descargar (y compilar) una versión reciente de Libcurl, vinculando a una biblioteca OpenSSL – consulte el README para los pasos reales.

Esto se siente como mucho trabajo comparado con los lenguajes modernos, particularmente cuando Go (o Lua, o Python, o cualquiera de los otros) son lo suficientemente rápidos para tareas como esta.

La otra cosa que había olvidado, a pesar de llevar las cicatrices de batallas anteriores, es el terror de la asignación de memoria. Para mantener el ejemplo simple, preasigné la longitud de la cadena de la URL como 1024 caracteres, y verifiqué los límites de la longitud de la dirección de correo electrónico (usando strlen) antes de concatenar en ella (usando strcat).

Tratamos la cadena de Autorización con una clave API concatenada de la misma manera .. aunque sabemos que una clave API válida nunca será demasiado larga .. ¡eso no es protección! La entrada del usuario proveniente de una variable de entorno podría ser cualquier cosa. Debes programar de manera defensiva.

Un desarrollador más sofisticado podría usar malloc en lugar de la asignación de variables en la pila, y calcular exactamente cuán largas necesitan ser las cadenas unidas. Tener que pensar en esta complejidad adicional me dio un dolor en los diodos del lado izquierdo; me recordó los riesgos que los programadores C enfrentan cada día, tratando de evitar desbordamientos de buffer y efectos secundarios inesperados. Lo que nos lleva a ..

Lua

Lua es conocido por su fácil coexistencia junto a un cuerpo de código C, y aquí en SparkPost, usamos Lua extensamente para personalizaciones de Política dentro de nuestro MTA Momentum on-premise. También puedes usarlo como un lenguaje de script independiente, y es bastante bueno para eso también.

Con Lua 5.3 y el gestor de paquetes luarocks, usamos las bibliotecas luasocket y luasec. Mostrando su herencia de integración C, enlazamos a nuestra biblioteca local de OpenSSL. El proceso de instalación de luarocks llama al compilador gcc (o cualquier compilador C que estés usando), así que agregar nuevas bibliotecas lleva un tiempo.

El código Lua es bastante simple. Los caracteres — marcan comentarios.  La función https.request proporciona múltiples valores de retorno (un poco como Python y Go). La concatenación de cadenas se hace con el operador  .. (en lugar de + en Python).

El cuerpo de la respuesta de esta llamada se maneja con el módulo “ltn12” – ver aquí. Eso permite un manejo eficiente de datos que podrían ser devueltos en múltiples “trozos”. Como explica ese artículo:

La fábrica de tablas crea un recipiente que almacena todos los datos obtenidos en una tabla. Los datos luego pueden ser eficientemente concatenados en una sola cadena con la función de biblioteca table.concat.

Nuestro ejemplo solo concatena la tabla t y la imprime; podrías usar un filtro para realizar más procesamiento.

Perl

Mientras que Perl es famoso por sus one liners, este no es uno de ellos.  Perl fue diseñado para búsquedas y modificaciones de documentos muy rápidas, pero en realidad es capaz de mucho más.  Una vez escribí un conjunto completo de control de Inventario en Perl.  Vaya figura.   D e t o d o s m o d o s…

Este script hace uso de LWP::UserAgent y HTTP::Request y opcionalmente los paquetes JSON y Data::Dumper dependiendo de cómo quieras ver el resultado. Como con todos los otros scripts en esta página, debes preestablecer una variable de entorno SPARKPOST_API_KEY a tu clave API generada que incluye la función de Validación de Recipientes. Este script codifica de forma rígida $recipient = ‘test@gmail.com’ pero puedes fácilmente agregar entrada desde la línea de comandos o consumir desde un archivo.

Después de que todas las variables estén pobladas, cargamos un HTTP:Request con parámetros GET y lo enviamos al LWP:UserAgent.  El “mensaje” resultante es el resultado de la prueba de validación del correo electrónico como un array.  Puedes usar JSON y DUMPER para mostrar el resultado o simplemente pasar el array para procesamiento adicional.

VB.net

Visual Basic no es visual y no es básico (en mi humilde opinión), pero es el número 6 en el índice de lenguajes TIOBE, así que aquí vamos.

Hay otras formas de hacer esto, pero el camino más fácil al éxito es utilizar el SDK de Visual Studio en una plataforma Windows. Enciende Visual Studio, comienza un nuevo proyecto y selecciona Visual Basic, luego selecciona console.app.  Asegúrate de usar la versión VB, no la versión C# – es fácil pasar por alto eso en el SDK.




En este punto, puedes editar las líneas manualmente o copiar/pegar el código desde aquí en VS y ahorrar un montón de tiempo. Para que este código funcione, necesitas añadir una variable de entorno de Windows.  La manera más fácil de hacerlo es abrir un símbolo del sistema y usar setx.exe así: 

C:\Users\me>setx SPARKPOST_API_KEY  "142<redacted<redacted>c531c3"

En Windows 10, esto se aplica a tu entorno de usuario, pero no está inmediatamente disponible en la sesión de comandos actual, por lo que probarlo con un "set" no funcionará, pero estará disponible para el código. Si construyes y ejecutas el código incluido en el repositorio, verás el resultado de la validación.

Rust

Rust es un lenguaje para programación de sistemas y servicios web que está enfocado en el rendimiento, seguridad y concurrencia. Como dice Wikipedia, Rust ha sido el "lenguaje de programación más amado" en la Encuesta de Desarrolladores de Stack Overflow desde 2016.

El código Rust en nuestro repositorio de Github usa la biblioteca reqwest con tokio async, similar a este ejemplo del recetario de Rust. (No es un error tipográfico, el nombre de la biblioteca reqwest se escribe así). Hemos incluido un archivo de configuración del gestor de paquetes cargo, así que puedes construir y ejecutar con:

cd rust_recipient_validation cargo run

Esto compilará el paquete en código ejecutable y lo ejecutará:

dev terminado [sin optimizar + información debug] objetivo(s) en 0.10s Ejecutando `target/debug/rust_recipient_validation` Estado: 200 OK Cuerpo: : (etc)

El código usa std:env para leer la variable de entorno SPARKPOST_API_KEY. Una cláusula match maneja el caso en el que la clave no está definida. Si todo está bien, se crea un nuevo reqwest::Client y se emite una llamada async, seguida de un .await? (ver aquí). Async, en lugar de la simple llamada bloqueante, parece ser necesaria para establecer encabezados de solicitud. El texto del cuerpo de la respuesta se lee con un segundo .await?, según este ejemplo.

Resumen

En este artículo, hemos recorrido ejemplos de código de Validación de Recipientes en muchos idiomas. Aquí está nuestra solicitud para ti.

Dinos si crees que hemos pasado por alto tu idioma favorito. Quizás no tengamos tantos ejemplos como The Fibonacci Project, pero nos encantaría añadir algunos más. Además, si crees que nuestros ejemplos pueden mejorarse, ¡háznoslo saber!

Únete a nuestro Newsletter.

Mantente al día con Bird a través de actualizaciones semanales en tu buzón.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.

Únete a nuestro Newsletter.

Mantente al día con Bird a través de actualizaciones semanales en tu buzón.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.

Únete a nuestro Newsletter.

Mantente al día con Bird a través de actualizaciones semanales en tu buzón.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.

Pinterest logo
Uber logo
Square logo
Logo de Adobe
Meta logo
PayPal logo

Company

Configuración de privacidad

Newsletter

Mantente al día con Bird a través de actualizaciones semanales en tu buzón.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.

Uber logo
Square logo
Logo de Adobe
Meta logo

Company

Configuración de privacidad

Newsletter

Mantente al día con Bird a través de actualizaciones semanales en tu buzón.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.

Uber logo
Logo de Adobe
Meta logo

Reach

Grow

Manage

Automate

Recursos

Company

Newsletter

Mantente al día con Bird a través de actualizaciones semanales en tu buzón.

Al enviar, aceptas que Bird pueda contactarte sobre nuestros productos y servicios.

Puedes darte de baja en cualquier momento. Consulta el Aviso de Privacidad de Bird para obtener detalles sobre el procesamiento de datos.