Validação do Destinatário: Exemplos de Código de Verificação de Email

Pássaro

8 de jul. de 2020

Email

1 min read

Validação do Destinatário: Exemplos de Código de Verificação de Email

Principais Conclusões

    • Validação baseada em dados, não em suposições. A Validação de Destinatário da Bird (anteriormente SparkPost) usa bilhões de eventos reais de entrega e engajamento para determinar se um endereço de e-mail é válido, arriscado, não entregável ou contém um erro de digitação.

    • Mais inteligente do que verificações de sintaxe. Ao contrário das ferramentas tradicionais baseadas em regex, este modelo usa dados do mundo real para classificar a entregabilidade e até sugere correções com um recurso de “did_you_mean”.

    • Integração em tempo real. Valide endereços de e-mail diretamente dentro de seus formulários de inscrição, CRMs ou listas em massa através do endpoint da API /recipient-validation/single/.

    • Exemplos voltados para desenvolvedores. Trechos de código funcionais estão disponíveis em várias linguagens de programação — incluindo Python, Node.js, PHP, Go, C#, Ruby, Java, Rust e mais — para facilitar a integração.

    • Melhores práticas de segurança. Chaves da API devem sempre ser armazenadas no lado do servidor (nunca expostas no código do lado do cliente), utilizando variáveis de ambiente como SPARKPOST_API_KEY.

    • Além da validação. Combine a Validação de Destinatário com consumidores de webhook ou Funções do Azure para construir fluxos de trabalho de verificação escaláveis e sem servidor para uso em produção.

    • Melhoria contínua. Os desenvolvedores são incentivados a contribuir com exemplos em outras linguagens, garantindo acessibilidade global entre os ecossistemas.

Destaques de Perguntas e Respostas

  • O que é Validação de Destinatário?

    É o sistema de validação de e-mails alimentado pela API do Bird que classifica endereços como válido, de risco, neutro, não entregável ou erro de digitação, aproveitando dados de bilhões de eventos de entrega do mundo real.

  • Como isso difere da validação de sintaxe básica?

    Validadores tradicionais verificam apenas o formato; o sistema da Bird avalia dados ao vivo, como taxas de rejeição, métricas de engajamento e padrões de entregabilidade para fazer previsões mais inteligentes.

  • Que tipo de informação a API retorna?

    Cada resposta de validação inclui:

    • Classificação de status (válido, arriscado, etc.)

    • Código de razão (por que um endereço é sinalizado)

    • Correção opcional

  • Posso validar e-mails em massa?

    Sim. Você pode enviar listas inteiras no aplicativo web ou usar a API para validar endereços individuais programaticamente como parte do seu fluxo de trabalho.

  • Quais linguagens de programação são suportadas?

    Exemplos de código estão disponíveis para mais de uma dúzia de linguagens — incluindo Python, Node.js, PHP, Go, C#, Java, Rust e Perl — cobrindo tanto sistemas modernos quanto legados.

  • Onde devo armazenar minha chave de API?

    Sempre mantenha isso no lado do servidor usando uma variável de ambiente como SPARKPOST_API_KEY. Nunca a incorpore em scripts do lado do cliente ou no código do navegador.

  • Isso pode ser integrado em fluxos de trabalho automatizados?

    Absolutamente. Você pode usar o Flow Builder do Bird ou Azure Functions para validar endereços em tempo real antes de acionar automações subsequentes, como e-mails de confirmação ou atualizações de CRM.

  • Por que as empresas devem se importar com a precisão da validação?

    A validação de alta qualidade melhora a reputação do remetente, previne devoluções e aumenta o retorno sobre investimento da campanha, garantindo que cada mensagem chegue a uma caixa de entrada válida.

  • O que vem a seguir para os desenvolvedores?

    O Bird convida contribuições da comunidade para novos exemplos de linguagem e melhorias nos existentes, ajudando a expandir a acessibilidade de validação em todo o mundo.

A validação de destinatários do SparkPost agora está disponível tanto para clientes existentes do SparkPost quanto para novos clientes que não enviam. Ela utiliza uma análise poderosa baseada em dados sobre bilhões de eventos de rejeição, entrega e engajamento diariamente para treinar nosso algoritmo, oferecendo uma das ferramentas de validação de e-mail mais poderosas do mercado, para que você possa enviar e-mails de forma mais inteligente.

O SparkPost Validação de Destinatários agora está disponível tanto para clientes existentes do SparkPost quanto para novos clientes que não estão enviando. Ele utiliza uma análise poderosa baseada em dados, em bilhões de eventos de devolução, entrega e engajamento diariamente, para treinar nosso algoritmo, trazendo a você uma das ferramentas de validação de e-mail mais poderosas do mercado, para que você possa enviar e-mails de forma mais inteligente. Isso representa a mais recente evolução nas técnicas de validação de e-mail, passando de simples verificações de sintaxe para abordagens sofisticadas baseadas em dados que fornecem resultados mais precisos.

Este artigo explica como você pode aproveitar ao máximo os dados que receberá de volta em cada destinatário validado – você verá que classificamos os endereços como “válidos”, “risco”, “neutros”, “indelivery” e “typo”. Nós fornecemos um código de “razão” e também um “did_you_mean” para erros de digitação conhecidas nos endereços.

O SparkPost Validação de Destinatários agora está disponível tanto para clientes existentes do SparkPost quanto para novos clientes que não estão enviando. Ele utiliza uma análise poderosa baseada em dados, em bilhões de eventos de devolução, entrega e engajamento diariamente, para treinar nosso algoritmo, trazendo a você uma das ferramentas de validação de e-mail mais poderosas do mercado, para que você possa enviar e-mails de forma mais inteligente. Isso representa a mais recente evolução nas técnicas de validação de e-mail, passando de simples verificações de sintaxe para abordagens sofisticadas baseadas em dados que fornecem resultados mais precisos.

Este artigo explica como você pode aproveitar ao máximo os dados que receberá de volta em cada destinatário validado – você verá que classificamos os endereços como “válidos”, “risco”, “neutros”, “indelivery” e “typo”. Nós fornecemos um código de “razão” e também um “did_you_mean” para erros de digitação conhecidas nos endereços.

O SparkPost Validação de Destinatários agora está disponível tanto para clientes existentes do SparkPost quanto para novos clientes que não estão enviando. Ele utiliza uma análise poderosa baseada em dados, em bilhões de eventos de devolução, entrega e engajamento diariamente, para treinar nosso algoritmo, trazendo a você uma das ferramentas de validação de e-mail mais poderosas do mercado, para que você possa enviar e-mails de forma mais inteligente. Isso representa a mais recente evolução nas técnicas de validação de e-mail, passando de simples verificações de sintaxe para abordagens sofisticadas baseadas em dados que fornecem resultados mais precisos.

Este artigo explica como você pode aproveitar ao máximo os dados que receberá de volta em cada destinatário validado – você verá que classificamos os endereços como “válidos”, “risco”, “neutros”, “indelivery” e “typo”. Nós fornecemos um código de “razão” e também um “did_you_mean” para erros de digitação conhecidas nos endereços.

C#

Estou menos familiarizado com C# – para mim, parece bastante semelhante ao Java, em vez de ao C. Eu consegui montar isso seguindo exemplos mostrados na biblioteca de requisições System.Net.Http.

O Postman pode gerar automaticamente um código de exemplo usando RestSharp, se você preferir.

Estou menos familiarizado com C# – para mim, parece bastante semelhante ao Java, em vez de ao C. Eu consegui montar isso seguindo exemplos mostrados na biblioteca de requisições System.Net.Http.

O Postman pode gerar automaticamente um código de exemplo usando RestSharp, se você preferir.

Estou menos familiarizado com C# – para mim, parece bastante semelhante ao Java, em vez de ao C. Eu consegui montar isso seguindo exemplos mostrados na biblioteca de requisições System.Net.Http.

O Postman pode gerar automaticamente um código de exemplo usando RestSharp, se você preferir.

Solicitações de API

No aplicativo web SparkPost, você pode arrastar e soltar uma lista inteira para validação. Você também pode usar a API para validar endereços únicos, assim você pode incorporar a validação diretamente no seu fluxo de entrada de endereços.

Há algum tempo, nós criamos uma ferramenta de linha de comando Python usando esta API. Discutimos o que deveríamos fazer para outras linguagens – e aqui estamos nós! Vamos começar.

Esta pasta do repositório do Github contém exemplos de chamadas de API de Validação de Destinatário em cerca de uma dúzia de linguagens diferentes. Tentamos cobrir as linguagens aplicáveis mais populares.

A maneira comum de trabalhar através de todos esses exemplos é:

  • Pegue sua chave da variável de ambiente SPARKPOST_API_KEY

  • Faça uma chamada de API para /api/v1/recipient-validation/single/ para validar um destinatário

  • Receba de volta uma string de resposta, contendo dados formatados em JSON com o resultado

  • Imprima o resultado


Linguagem

Biblioteca HTTP usada

Onde a validação acontece

Considerações notáveis

Bash / Curl

curl CLI

Uso apenas no terminal

Sem análise do JSON de resposta

PHP

curl_setopt

Lado do servidor

Múltiplas opções de biblioteca disponíveis

Python

requests

Scripts ou aplicativos backend

Converte JSON automaticamente em dicionário

Node.js

axios (recomendado)

Apenas lado do servidor

Evite expor chaves de API do lado do cliente

Go

net/http + encoding/json

Serviços de backend

Segurança de tipo forte com structs personalizadas

C#

System.Net.Http

Aplicações de servidor

Postman pode gerar a versão RestSharp

Java

HttpURLConnection

Serviços de servidor

Verbosidade, mas amplamente implantável

C / C++

libcurl + OpenSSL

Ferramentas de nível de sistema

Segurança de memória manual necessária

Lua

luasocket + luasec

Companheiro de scripting

Pode transmitir eficientemente respostas fragmentadas

Perl

LWP::UserAgent

Sistemas legados

Análise de JSON opcional

VB.net

Visual Studio SDK

Aplicações de console do Windows

Configuração de variável de ambiente necessária

Rust

reqwest + tokio async

Serviços web modernos

Async necessário para o manuseio de cabeçalhos

A SparkPost possui bibliotecas para algumas, mas não todas, as linguagens cobertas aqui. Escolhemos escrever esses exemplos em “nativo” em vez disso, para que pudéssemos a) cobrir mais linguagens, b) mostrar quão simples o código subjacente pode ser e c) permitir que você veja claramente as semelhanças e diferenças entre as linguagens.

No aplicativo web SparkPost, você pode arrastar e soltar uma lista inteira para validação. Você também pode usar a API para validar endereços únicos, assim você pode incorporar a validação diretamente no seu fluxo de entrada de endereços.

Há algum tempo, nós criamos uma ferramenta de linha de comando Python usando esta API. Discutimos o que deveríamos fazer para outras linguagens – e aqui estamos nós! Vamos começar.

Esta pasta do repositório do Github contém exemplos de chamadas de API de Validação de Destinatário em cerca de uma dúzia de linguagens diferentes. Tentamos cobrir as linguagens aplicáveis mais populares.

A maneira comum de trabalhar através de todos esses exemplos é:

  • Pegue sua chave da variável de ambiente SPARKPOST_API_KEY

  • Faça uma chamada de API para /api/v1/recipient-validation/single/ para validar um destinatário

  • Receba de volta uma string de resposta, contendo dados formatados em JSON com o resultado

  • Imprima o resultado


Linguagem

Biblioteca HTTP usada

Onde a validação acontece

Considerações notáveis

Bash / Curl

curl CLI

Uso apenas no terminal

Sem análise do JSON de resposta

PHP

curl_setopt

Lado do servidor

Múltiplas opções de biblioteca disponíveis

Python

requests

Scripts ou aplicativos backend

Converte JSON automaticamente em dicionário

Node.js

axios (recomendado)

Apenas lado do servidor

Evite expor chaves de API do lado do cliente

Go

net/http + encoding/json

Serviços de backend

Segurança de tipo forte com structs personalizadas

C#

System.Net.Http

Aplicações de servidor

Postman pode gerar a versão RestSharp

Java

HttpURLConnection

Serviços de servidor

Verbosidade, mas amplamente implantável

C / C++

libcurl + OpenSSL

Ferramentas de nível de sistema

Segurança de memória manual necessária

Lua

luasocket + luasec

Companheiro de scripting

Pode transmitir eficientemente respostas fragmentadas

Perl

LWP::UserAgent

Sistemas legados

Análise de JSON opcional

VB.net

Visual Studio SDK

Aplicações de console do Windows

Configuração de variável de ambiente necessária

Rust

reqwest + tokio async

Serviços web modernos

Async necessário para o manuseio de cabeçalhos

A SparkPost possui bibliotecas para algumas, mas não todas, as linguagens cobertas aqui. Escolhemos escrever esses exemplos em “nativo” em vez disso, para que pudéssemos a) cobrir mais linguagens, b) mostrar quão simples o código subjacente pode ser e c) permitir que você veja claramente as semelhanças e diferenças entre as linguagens.

No aplicativo web SparkPost, você pode arrastar e soltar uma lista inteira para validação. Você também pode usar a API para validar endereços únicos, assim você pode incorporar a validação diretamente no seu fluxo de entrada de endereços.

Há algum tempo, nós criamos uma ferramenta de linha de comando Python usando esta API. Discutimos o que deveríamos fazer para outras linguagens – e aqui estamos nós! Vamos começar.

Esta pasta do repositório do Github contém exemplos de chamadas de API de Validação de Destinatário em cerca de uma dúzia de linguagens diferentes. Tentamos cobrir as linguagens aplicáveis mais populares.

A maneira comum de trabalhar através de todos esses exemplos é:

  • Pegue sua chave da variável de ambiente SPARKPOST_API_KEY

  • Faça uma chamada de API para /api/v1/recipient-validation/single/ para validar um destinatário

  • Receba de volta uma string de resposta, contendo dados formatados em JSON com o resultado

  • Imprima o resultado


Linguagem

Biblioteca HTTP usada

Onde a validação acontece

Considerações notáveis

Bash / Curl

curl CLI

Uso apenas no terminal

Sem análise do JSON de resposta

PHP

curl_setopt

Lado do servidor

Múltiplas opções de biblioteca disponíveis

Python

requests

Scripts ou aplicativos backend

Converte JSON automaticamente em dicionário

Node.js

axios (recomendado)

Apenas lado do servidor

Evite expor chaves de API do lado do cliente

Go

net/http + encoding/json

Serviços de backend

Segurança de tipo forte com structs personalizadas

C#

System.Net.Http

Aplicações de servidor

Postman pode gerar a versão RestSharp

Java

HttpURLConnection

Serviços de servidor

Verbosidade, mas amplamente implantável

C / C++

libcurl + OpenSSL

Ferramentas de nível de sistema

Segurança de memória manual necessária

Lua

luasocket + luasec

Companheiro de scripting

Pode transmitir eficientemente respostas fragmentadas

Perl

LWP::UserAgent

Sistemas legados

Análise de JSON opcional

VB.net

Visual Studio SDK

Aplicações de console do Windows

Configuração de variável de ambiente necessária

Rust

reqwest + tokio async

Serviços web modernos

Async necessário para o manuseio de cabeçalhos

A SparkPost possui bibliotecas para algumas, mas não todas, as linguagens cobertas aqui. Escolhemos escrever esses exemplos em “nativo” em vez disso, para que pudéssemos a) cobrir mais linguagens, b) mostrar quão simples o código subjacente pode ser e c) permitir que você veja claramente as semelhanças e diferenças entre as linguagens.

Bash / Curl

Este é o prêmio para o código mais curto – ele simplesmente usa a ferramenta de linha de comando “curl” para fazer a solicitação e imprimir a resposta diretamente no terminal. Você pode ver que a saída é uma string, contendo JSON; na verdade, não analisamos os atributos de resultado individuais.

Este é o prêmio para o código mais curto – ele simplesmente usa a ferramenta de linha de comando “curl” para fazer a solicitação e imprimir a resposta diretamente no terminal. Você pode ver que a saída é uma string, contendo JSON; na verdade, não analisamos os atributos de resultado individuais.

Este é o prêmio para o código mais curto – ele simplesmente usa a ferramenta de linha de comando “curl” para fazer a solicitação e imprimir a resposta diretamente no terminal. Você pode ver que a saída é uma string, contendo JSON; na verdade, não analisamos os atributos de resultado individuais.

PHP

A confiável PHP tem algumas maneiras diferentes de fazer chamadas de API HTTPS. Aqui, escolhemos usar curl_setopt junto com curl_exec.

Se você preferir HTTP_Request2 ou pecl_http, então o Postman tem um gerador de código embutido que você pode usar para criar exemplos semelhantes – basta configurar uma solicitação GET funcional e usar o botão "Código".

Postman interface used for API testing, featuring a "Single Address Validation" endpoint with GET parameters, a Headers section showing Authorization and Accept keys, and a highlighted area labeled "Cookies" and "Code" on the right side.

A confiável PHP tem algumas maneiras diferentes de fazer chamadas de API HTTPS. Aqui, escolhemos usar curl_setopt junto com curl_exec.

Se você preferir HTTP_Request2 ou pecl_http, então o Postman tem um gerador de código embutido que você pode usar para criar exemplos semelhantes – basta configurar uma solicitação GET funcional e usar o botão "Código".

Postman interface used for API testing, featuring a "Single Address Validation" endpoint with GET parameters, a Headers section showing Authorization and Accept keys, and a highlighted area labeled "Cookies" and "Code" on the right side.

A confiável PHP tem algumas maneiras diferentes de fazer chamadas de API HTTPS. Aqui, escolhemos usar curl_setopt junto com curl_exec.

Se você preferir HTTP_Request2 ou pecl_http, então o Postman tem um gerador de código embutido que você pode usar para criar exemplos semelhantes – basta configurar uma solicitação GET funcional e usar o botão "Código".

Postman interface used for API testing, featuring a "Single Address Validation" endpoint with GET parameters, a Headers section showing Authorization and Accept keys, and a highlighted area labeled "Cookies" and "Code" on the right side.

Python

Isso utiliza o popular requests módulo, que é de alto nível e, portanto, fácil de usar. Este exemplo verifica o código de status retornado, converte os resultados JSON de volta em um objeto dicionário Python e imprime o objeto resultante em vez de apenas uma string.

Se você preferir a biblioteca http.client embutida, o Postman pode gerar código para isso também; não é muito mais longo.

Isso utiliza o popular requests módulo, que é de alto nível e, portanto, fácil de usar. Este exemplo verifica o código de status retornado, converte os resultados JSON de volta em um objeto dicionário Python e imprime o objeto resultante em vez de apenas uma string.

Se você preferir a biblioteca http.client embutida, o Postman pode gerar código para isso também; não é muito mais longo.

Isso utiliza o popular requests módulo, que é de alto nível e, portanto, fácil de usar. Este exemplo verifica o código de status retornado, converte os resultados JSON de volta em um objeto dicionário Python e imprime o objeto resultante em vez de apenas uma string.

Se você preferir a biblioteca http.client embutida, o Postman pode gerar código para isso também; não é muito mais longo.

Node.js

Existem muitas diferentes bibliotecas HTTP(S) para node.js. Comecei com o pacote mais antigo request (usando uma função de callback), mas está depreciado e não é mais mantido ativamente.  Eu escolhi o pacote mais novo axios (usando promises). 

O Postman também pode te dar um exemplo nativo de Javascript e Unirest, caso você prefira.

Como este código precisa de acesso à sua chave de API, recomendamos fortemente que você chame nossa API do lado do servidor, nunca do lado do cliente (navegador / dispositivo móvel).

Existem muitas diferentes bibliotecas HTTP(S) para node.js. Comecei com o pacote mais antigo request (usando uma função de callback), mas está depreciado e não é mais mantido ativamente.  Eu escolhi o pacote mais novo axios (usando promises). 

O Postman também pode te dar um exemplo nativo de Javascript e Unirest, caso você prefira.

Como este código precisa de acesso à sua chave de API, recomendamos fortemente que você chame nossa API do lado do servidor, nunca do lado do cliente (navegador / dispositivo móvel).

Existem muitas diferentes bibliotecas HTTP(S) para node.js. Comecei com o pacote mais antigo request (usando uma função de callback), mas está depreciado e não é mais mantido ativamente.  Eu escolhi o pacote mais novo axios (usando promises). 

O Postman também pode te dar um exemplo nativo de Javascript e Unirest, caso você prefira.

Como este código precisa de acesso à sua chave de API, recomendamos fortemente que você chame nossa API do lado do servidor, nunca do lado do cliente (navegador / dispositivo móvel).

Ir

Go se esforça para uma filosofia de “uma boa maneira” de fazer algo; neste caso, usando as bibliotecas integradas “baterias incluidas” net/http, encoding/json e outras.

O comprimento é devido principalmente às cláusulas explícitas de verificação de erro if err != nil {} em todos os lugares (sem exceções LOL).

Também declaramos a estrutura do objeto de resultados com tags de campo, para nos permitir “deserializar” a string JSON retornada. Sobrepomos as tags “resultados” e “erros” para permitir ambos os tipos de retorno.

Gosto da velocidade, segurança de tipo e clareza do Go, mesmo que o código seja mais longo do que nossos exemplos anteriores.

Go se esforça para uma filosofia de “uma boa maneira” de fazer algo; neste caso, usando as bibliotecas integradas “baterias incluidas” net/http, encoding/json e outras.

O comprimento é devido principalmente às cláusulas explícitas de verificação de erro if err != nil {} em todos os lugares (sem exceções LOL).

Também declaramos a estrutura do objeto de resultados com tags de campo, para nos permitir “deserializar” a string JSON retornada. Sobrepomos as tags “resultados” e “erros” para permitir ambos os tipos de retorno.

Gosto da velocidade, segurança de tipo e clareza do Go, mesmo que o código seja mais longo do que nossos exemplos anteriores.

Go se esforça para uma filosofia de “uma boa maneira” de fazer algo; neste caso, usando as bibliotecas integradas “baterias incluidas” net/http, encoding/json e outras.

O comprimento é devido principalmente às cláusulas explícitas de verificação de erro if err != nil {} em todos os lugares (sem exceções LOL).

Também declaramos a estrutura do objeto de resultados com tags de campo, para nos permitir “deserializar” a string JSON retornada. Sobrepomos as tags “resultados” e “erros” para permitir ambos os tipos de retorno.

Gosto da velocidade, segurança de tipo e clareza do Go, mesmo que o código seja mais longo do que nossos exemplos anteriores.

Java

Eu não escrevi nenhum Java sério antes, mas foi fácil montar isso seguindo a abordagem geral utilizada na biblioteca SparkPost para outras chamadas GET.

Por coincidência, usar o VS Code como meu editor / depurador funcionou muito bem para todas as linguagens aqui, me proporcionando realce de sintaxe, passo a passo do depurador / visualização de variáveis etc. The InputStreamReader e BufferedReader são semelhantes a (e eu assumi que foram copiados por) Go.

Eu não escrevi nenhum Java sério antes, mas foi fácil montar isso seguindo a abordagem geral utilizada na biblioteca SparkPost para outras chamadas GET.

Por coincidência, usar o VS Code como meu editor / depurador funcionou muito bem para todas as linguagens aqui, me proporcionando realce de sintaxe, passo a passo do depurador / visualização de variáveis etc. The InputStreamReader e BufferedReader são semelhantes a (e eu assumi que foram copiados por) Go.

Eu não escrevi nenhum Java sério antes, mas foi fácil montar isso seguindo a abordagem geral utilizada na biblioteca SparkPost para outras chamadas GET.

Por coincidência, usar o VS Code como meu editor / depurador funcionou muito bem para todas as linguagens aqui, me proporcionando realce de sintaxe, passo a passo do depurador / visualização de variáveis etc. The InputStreamReader e BufferedReader são semelhantes a (e eu assumi que foram copiados por) Go.

C / C++

Foi uma viagem pela memória, já que escrevi muito código C na década de 1990, alguns ainda funcionando em redes de telecomunicações em algum lugar. Como a história do C é anterior à Web moderna, não é surpreendente que o suporte a bibliotecas seja uma tarefa manual. Precisamos baixar (e compilar) uma versão recente do Libcurl, vinculando-a a uma biblioteca OpenSSL – veja o README para os passos reais.

Isso parece ser muito trabalho em comparação com linguagens modernas, particularmente quando Go (ou Lua, ou Python, ou qualquer uma das outras) são rápidas o suficiente para tarefas como essa.

A outra coisa que eu havia esquecido, apesar de carregar as cicatrizes de batalhas anteriores, é o medo da alocação de memória! Para manter o exemplo simples, pré-aloquei o comprimento da string da URL como 1024 caracteres e verifiquei o comprimento do endereço de e-mail (usando strlen) antes de concatená-lo (usando strcat).

Tratamos a string de Autorização com uma chave de API concatenada da mesma forma .. mesmo sabendo que uma chave de API válida nunca será muito longa .. isso não é uma proteção! A entrada do usuário vindo de uma variável de ambiente pode ser qualquer coisa. Você deve programar defensivamente.

Um desenvolvedor mais sofisticado poderia usar malloc em vez da alocação de variável na pilha e calcular exatamente por quanto tempo as strings unidas precisam ser. Ter que pensar sobre essa complexidade adicional me deu uma dor nos diodos do meu lado esquerdo; isso me lembrou dos riscos que os programadores de C enfrentam todos os dias, tentando evitar estouros de buffer e efeitos colaterais inesperados. O que nos leva a ..

Foi uma viagem pela memória, já que escrevi muito código C na década de 1990, alguns ainda funcionando em redes de telecomunicações em algum lugar. Como a história do C é anterior à Web moderna, não é surpreendente que o suporte a bibliotecas seja uma tarefa manual. Precisamos baixar (e compilar) uma versão recente do Libcurl, vinculando-a a uma biblioteca OpenSSL – veja o README para os passos reais.

Isso parece ser muito trabalho em comparação com linguagens modernas, particularmente quando Go (ou Lua, ou Python, ou qualquer uma das outras) são rápidas o suficiente para tarefas como essa.

A outra coisa que eu havia esquecido, apesar de carregar as cicatrizes de batalhas anteriores, é o medo da alocação de memória! Para manter o exemplo simples, pré-aloquei o comprimento da string da URL como 1024 caracteres e verifiquei o comprimento do endereço de e-mail (usando strlen) antes de concatená-lo (usando strcat).

Tratamos a string de Autorização com uma chave de API concatenada da mesma forma .. mesmo sabendo que uma chave de API válida nunca será muito longa .. isso não é uma proteção! A entrada do usuário vindo de uma variável de ambiente pode ser qualquer coisa. Você deve programar defensivamente.

Um desenvolvedor mais sofisticado poderia usar malloc em vez da alocação de variável na pilha e calcular exatamente por quanto tempo as strings unidas precisam ser. Ter que pensar sobre essa complexidade adicional me deu uma dor nos diodos do meu lado esquerdo; isso me lembrou dos riscos que os programadores de C enfrentam todos os dias, tentando evitar estouros de buffer e efeitos colaterais inesperados. O que nos leva a ..

Foi uma viagem pela memória, já que escrevi muito código C na década de 1990, alguns ainda funcionando em redes de telecomunicações em algum lugar. Como a história do C é anterior à Web moderna, não é surpreendente que o suporte a bibliotecas seja uma tarefa manual. Precisamos baixar (e compilar) uma versão recente do Libcurl, vinculando-a a uma biblioteca OpenSSL – veja o README para os passos reais.

Isso parece ser muito trabalho em comparação com linguagens modernas, particularmente quando Go (ou Lua, ou Python, ou qualquer uma das outras) são rápidas o suficiente para tarefas como essa.

A outra coisa que eu havia esquecido, apesar de carregar as cicatrizes de batalhas anteriores, é o medo da alocação de memória! Para manter o exemplo simples, pré-aloquei o comprimento da string da URL como 1024 caracteres e verifiquei o comprimento do endereço de e-mail (usando strlen) antes de concatená-lo (usando strcat).

Tratamos a string de Autorização com uma chave de API concatenada da mesma forma .. mesmo sabendo que uma chave de API válida nunca será muito longa .. isso não é uma proteção! A entrada do usuário vindo de uma variável de ambiente pode ser qualquer coisa. Você deve programar defensivamente.

Um desenvolvedor mais sofisticado poderia usar malloc em vez da alocação de variável na pilha e calcular exatamente por quanto tempo as strings unidas precisam ser. Ter que pensar sobre essa complexidade adicional me deu uma dor nos diodos do meu lado esquerdo; isso me lembrou dos riscos que os programadores de C enfrentam todos os dias, tentando evitar estouros de buffer e efeitos colaterais inesperados. O que nos leva a ..

Lua

Lua é conhecida por sua fácil coexistência ao lado de um código em C, e aqui na SparkPost, nós usamos Lua extensivamente para personalizações de Política dentro do nosso MTA local Momentum. Você também pode usá-la como uma linguagem de script independente, e ela é bem legal para isso também.

Com o Lua 5.3 e o gerenciador de pacotes luarocks, usamos as bibliotecas luasocket e luasec. Mostrando seu patrimônio de integração com C, vinculamos à nossa biblioteca local OpenSSL. O processo de instalação do luarocks chama o compilador gcc (ou qualquer que seja o compilador C que você esteja usando), então adicionar novas bibliotecas leva um tempo.

O código Lua é bastante simples. Os caracteres — marcam comentários.  A função https.request fornece vários valores de retorno (um pouco como Python e Go). A concatenação de strings é feita com o operador  .. (em vez de + em Python).

O corpo da resposta desta chamada é tratado com o módulo ‘ltn12’ – veja a página wiki do Lua sobre Filtros, Fontes e Sumidouros. Isso permite o manuseio eficiente de dados que podem ser retornados em múltiplos “pedacinhos”. Como aquele artigo explica:

A fábrica de tabelas cria um sumidouro que armazena todos os dados obtidos em uma tabela. Os dados podem ser concatenados eficientemente em uma única string com a função de biblioteca table.concat.

Nosso exemplo apenas concatena a tabela t e imprime; você poderia usar um filtro para realizar mais processamento.

Lua é conhecida por sua fácil coexistência ao lado de um código em C, e aqui na SparkPost, nós usamos Lua extensivamente para personalizações de Política dentro do nosso MTA local Momentum. Você também pode usá-la como uma linguagem de script independente, e ela é bem legal para isso também.

Com o Lua 5.3 e o gerenciador de pacotes luarocks, usamos as bibliotecas luasocket e luasec. Mostrando seu patrimônio de integração com C, vinculamos à nossa biblioteca local OpenSSL. O processo de instalação do luarocks chama o compilador gcc (ou qualquer que seja o compilador C que você esteja usando), então adicionar novas bibliotecas leva um tempo.

O código Lua é bastante simples. Os caracteres — marcam comentários.  A função https.request fornece vários valores de retorno (um pouco como Python e Go). A concatenação de strings é feita com o operador  .. (em vez de + em Python).

O corpo da resposta desta chamada é tratado com o módulo ‘ltn12’ – veja a página wiki do Lua sobre Filtros, Fontes e Sumidouros. Isso permite o manuseio eficiente de dados que podem ser retornados em múltiplos “pedacinhos”. Como aquele artigo explica:

A fábrica de tabelas cria um sumidouro que armazena todos os dados obtidos em uma tabela. Os dados podem ser concatenados eficientemente em uma única string com a função de biblioteca table.concat.

Nosso exemplo apenas concatena a tabela t e imprime; você poderia usar um filtro para realizar mais processamento.

Lua é conhecida por sua fácil coexistência ao lado de um código em C, e aqui na SparkPost, nós usamos Lua extensivamente para personalizações de Política dentro do nosso MTA local Momentum. Você também pode usá-la como uma linguagem de script independente, e ela é bem legal para isso também.

Com o Lua 5.3 e o gerenciador de pacotes luarocks, usamos as bibliotecas luasocket e luasec. Mostrando seu patrimônio de integração com C, vinculamos à nossa biblioteca local OpenSSL. O processo de instalação do luarocks chama o compilador gcc (ou qualquer que seja o compilador C que você esteja usando), então adicionar novas bibliotecas leva um tempo.

O código Lua é bastante simples. Os caracteres — marcam comentários.  A função https.request fornece vários valores de retorno (um pouco como Python e Go). A concatenação de strings é feita com o operador  .. (em vez de + em Python).

O corpo da resposta desta chamada é tratado com o módulo ‘ltn12’ – veja a página wiki do Lua sobre Filtros, Fontes e Sumidouros. Isso permite o manuseio eficiente de dados que podem ser retornados em múltiplos “pedacinhos”. Como aquele artigo explica:

A fábrica de tabelas cria um sumidouro que armazena todos os dados obtidos em uma tabela. Os dados podem ser concatenados eficientemente em uma única string com a função de biblioteca table.concat.

Nosso exemplo apenas concatena a tabela t e imprime; você poderia usar um filtro para realizar mais processamento.

Perl

Enquanto Perl é famoso por seus códigos de uma linha, este não é um deles.  Perl foi projetado para busca e modificação de documentos muito rápidas, mas na verdade é capaz de muito mais.  Uma vez escrevi um conjunto completo de controle de Inventário em Perl.  Vá entender.   De qualquer forma…

Este script utiliza LWP::UserAgent e HTTP::Request e opcionalmente os pacotes JSON e Data::Dumper, dependendo de como você quer ver a saída. Como em todos os outros scripts nesta página, você deve pré-definir uma variável de ambiente SPARKPOST_API_KEY com sua chave API gerada que inclui a função de Validação de Destinatário. Este script codifica $recipient = ‘test@gmail.com’, mas você pode facilmente adicionar entrada de linha de comando ou consumir de um arquivo.

Depois que todas as variáveis estiverem preenchidas, carregamos um HTTP:Request com os parâmetros GET e o enviamos ao LWP:UserAgent.  A “mensagem” resultante é o resultado do teste de validação de email como um array.  Você pode usar JSON e DUMPER para exibir o resultado ou apenas passar o array para processamento adicional.

Enquanto Perl é famoso por seus códigos de uma linha, este não é um deles.  Perl foi projetado para busca e modificação de documentos muito rápidas, mas na verdade é capaz de muito mais.  Uma vez escrevi um conjunto completo de controle de Inventário em Perl.  Vá entender.   De qualquer forma…

Este script utiliza LWP::UserAgent e HTTP::Request e opcionalmente os pacotes JSON e Data::Dumper, dependendo de como você quer ver a saída. Como em todos os outros scripts nesta página, você deve pré-definir uma variável de ambiente SPARKPOST_API_KEY com sua chave API gerada que inclui a função de Validação de Destinatário. Este script codifica $recipient = ‘test@gmail.com’, mas você pode facilmente adicionar entrada de linha de comando ou consumir de um arquivo.

Depois que todas as variáveis estiverem preenchidas, carregamos um HTTP:Request com os parâmetros GET e o enviamos ao LWP:UserAgent.  A “mensagem” resultante é o resultado do teste de validação de email como um array.  Você pode usar JSON e DUMPER para exibir o resultado ou apenas passar o array para processamento adicional.

Enquanto Perl é famoso por seus códigos de uma linha, este não é um deles.  Perl foi projetado para busca e modificação de documentos muito rápidas, mas na verdade é capaz de muito mais.  Uma vez escrevi um conjunto completo de controle de Inventário em Perl.  Vá entender.   De qualquer forma…

Este script utiliza LWP::UserAgent e HTTP::Request e opcionalmente os pacotes JSON e Data::Dumper, dependendo de como você quer ver a saída. Como em todos os outros scripts nesta página, você deve pré-definir uma variável de ambiente SPARKPOST_API_KEY com sua chave API gerada que inclui a função de Validação de Destinatário. Este script codifica $recipient = ‘test@gmail.com’, mas você pode facilmente adicionar entrada de linha de comando ou consumir de um arquivo.

Depois que todas as variáveis estiverem preenchidas, carregamos um HTTP:Request com os parâmetros GET e o enviamos ao LWP:UserAgent.  A “mensagem” resultante é o resultado do teste de validação de email como um array.  Você pode usar JSON e DUMPER para exibir o resultado ou apenas passar o array para processamento adicional.

VB.net

Visual Basic não é visual e não é básico (na minha opinião), mas está em 6º lugar no índice de linguagem TIOBE, então aqui vamos nós.

Existem outras maneiras de fazer isso, mas o caminho mais fácil para o sucesso é usar o SDK do Visual Studio em uma plataforma Windows. Abra o Visual Studio, comece um novo projeto e selecione Visual Basic, em seguida, selecione console.app.  Certifique-se de usar a versão VB e não a versão C# – é fácil esquecer isso no SDK.

Visual Studio interface for creating a new project, highlighting options such as Console App (.NET Core) and ASP.NET Web Application, with sections for selecting the language, platform, and project type.


Neste ponto, você pode editar linhas manualmente ou copiar/colar o código daqui para o VS e economizar tempo. Para fazer esse código funcionar, você precisa adicionar uma variável de ambiente do Windows.  A maneira mais fácil de fazer isso é abrir um prompt de comando e usar setx.exe assim: 

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

No Windows 10, isso é aplicado ao seu ambiente de usuário, mas não está imediatamente disponível na sessão de comando atual, então testá-lo com um “set” não funcionará, mas estará disponível para o código. Se você compilar e executar o código incluído no repositório, verá o resultado da validação. Para desenvolvedores que constroem consumidores de webhook em produção que precisam validar endereços de email em larga escala, nosso guia de consumidor de webhook do Azure Functions mostra como construir soluções sem servidor que podem gerenciar fluxos de trabalho de validação de forma eficiente.

Visual Basic não é visual e não é básico (na minha opinião), mas está em 6º lugar no índice de linguagem TIOBE, então aqui vamos nós.

Existem outras maneiras de fazer isso, mas o caminho mais fácil para o sucesso é usar o SDK do Visual Studio em uma plataforma Windows. Abra o Visual Studio, comece um novo projeto e selecione Visual Basic, em seguida, selecione console.app.  Certifique-se de usar a versão VB e não a versão C# – é fácil esquecer isso no SDK.

Visual Studio interface for creating a new project, highlighting options such as Console App (.NET Core) and ASP.NET Web Application, with sections for selecting the language, platform, and project type.


Neste ponto, você pode editar linhas manualmente ou copiar/colar o código daqui para o VS e economizar tempo. Para fazer esse código funcionar, você precisa adicionar uma variável de ambiente do Windows.  A maneira mais fácil de fazer isso é abrir um prompt de comando e usar setx.exe assim: 

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

No Windows 10, isso é aplicado ao seu ambiente de usuário, mas não está imediatamente disponível na sessão de comando atual, então testá-lo com um “set” não funcionará, mas estará disponível para o código. Se você compilar e executar o código incluído no repositório, verá o resultado da validação. Para desenvolvedores que constroem consumidores de webhook em produção que precisam validar endereços de email em larga escala, nosso guia de consumidor de webhook do Azure Functions mostra como construir soluções sem servidor que podem gerenciar fluxos de trabalho de validação de forma eficiente.

Visual Basic não é visual e não é básico (na minha opinião), mas está em 6º lugar no índice de linguagem TIOBE, então aqui vamos nós.

Existem outras maneiras de fazer isso, mas o caminho mais fácil para o sucesso é usar o SDK do Visual Studio em uma plataforma Windows. Abra o Visual Studio, comece um novo projeto e selecione Visual Basic, em seguida, selecione console.app.  Certifique-se de usar a versão VB e não a versão C# – é fácil esquecer isso no SDK.

Visual Studio interface for creating a new project, highlighting options such as Console App (.NET Core) and ASP.NET Web Application, with sections for selecting the language, platform, and project type.


Neste ponto, você pode editar linhas manualmente ou copiar/colar o código daqui para o VS e economizar tempo. Para fazer esse código funcionar, você precisa adicionar uma variável de ambiente do Windows.  A maneira mais fácil de fazer isso é abrir um prompt de comando e usar setx.exe assim: 

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

No Windows 10, isso é aplicado ao seu ambiente de usuário, mas não está imediatamente disponível na sessão de comando atual, então testá-lo com um “set” não funcionará, mas estará disponível para o código. Se você compilar e executar o código incluído no repositório, verá o resultado da validação. Para desenvolvedores que constroem consumidores de webhook em produção que precisam validar endereços de email em larga escala, nosso guia de consumidor de webhook do Azure Functions mostra como construir soluções sem servidor que podem gerenciar fluxos de trabalho de validação de forma eficiente.

Ferro

Rust é uma linguagem para programação de sistemas e serviços web que se concentra em desempenho, segurança e concorrência. Como a Wikipedia diz, Rust tem sido a “linguagem de programação mais amada” na Pesquisa de Desenvolvedores do Stack Overflow desde 2016.

O código Rust em nosso repositório do Github usa a biblioteca reqwest com tokio async, semelhante ao exemplo no Rust Cookbook. (Isso não é um erro de digitação, o nome da biblioteca reqwest é escrito assim). Incluímos um arquivo de configuração do gerenciador de pacotes cargo, para que você possa compilar e executar com:

cd rust_recipient_validation cargo run

Isso compilará o pacote em código executável e o executará:

Finished dev [unoptimized + debuginfo] target(s) in 0.10s
Running `target/debug/rust_recipient_validation`
Status: 200 OK
Body: : (etc)

O código usa std:env para ler a variável de ambiente SPARKPOST_API_KEY. Uma cláusula match trata o caso em que a chave está indefinida. Se tudo estiver bem, um novo reqwest::Client é criado e uma chamada assíncrona é emitida, seguida por um .await? (veja a documentação do reqwest). Async, em vez da chamada bloqueante mais simples, parece ser necessário para definir os cabeçalhos da solicitação. O texto do corpo da resposta é lido com um segundo .await?, conforme este exemplo.

Rust é uma linguagem para programação de sistemas e serviços web que se concentra em desempenho, segurança e concorrência. Como a Wikipedia diz, Rust tem sido a “linguagem de programação mais amada” na Pesquisa de Desenvolvedores do Stack Overflow desde 2016.

O código Rust em nosso repositório do Github usa a biblioteca reqwest com tokio async, semelhante ao exemplo no Rust Cookbook. (Isso não é um erro de digitação, o nome da biblioteca reqwest é escrito assim). Incluímos um arquivo de configuração do gerenciador de pacotes cargo, para que você possa compilar e executar com:

cd rust_recipient_validation cargo run

Isso compilará o pacote em código executável e o executará:

Finished dev [unoptimized + debuginfo] target(s) in 0.10s
Running `target/debug/rust_recipient_validation`
Status: 200 OK
Body: : (etc)

O código usa std:env para ler a variável de ambiente SPARKPOST_API_KEY. Uma cláusula match trata o caso em que a chave está indefinida. Se tudo estiver bem, um novo reqwest::Client é criado e uma chamada assíncrona é emitida, seguida por um .await? (veja a documentação do reqwest). Async, em vez da chamada bloqueante mais simples, parece ser necessário para definir os cabeçalhos da solicitação. O texto do corpo da resposta é lido com um segundo .await?, conforme este exemplo.

Rust é uma linguagem para programação de sistemas e serviços web que se concentra em desempenho, segurança e concorrência. Como a Wikipedia diz, Rust tem sido a “linguagem de programação mais amada” na Pesquisa de Desenvolvedores do Stack Overflow desde 2016.

O código Rust em nosso repositório do Github usa a biblioteca reqwest com tokio async, semelhante ao exemplo no Rust Cookbook. (Isso não é um erro de digitação, o nome da biblioteca reqwest é escrito assim). Incluímos um arquivo de configuração do gerenciador de pacotes cargo, para que você possa compilar e executar com:

cd rust_recipient_validation cargo run

Isso compilará o pacote em código executável e o executará:

Finished dev [unoptimized + debuginfo] target(s) in 0.10s
Running `target/debug/rust_recipient_validation`
Status: 200 OK
Body: : (etc)

O código usa std:env para ler a variável de ambiente SPARKPOST_API_KEY. Uma cláusula match trata o caso em que a chave está indefinida. Se tudo estiver bem, um novo reqwest::Client é criado e uma chamada assíncrona é emitida, seguida por um .await? (veja a documentação do reqwest). Async, em vez da chamada bloqueante mais simples, parece ser necessário para definir os cabeçalhos da solicitação. O texto do corpo da resposta é lido com um segundo .await?, conforme este exemplo.

Resumo

Neste artigo, discutimos exemplos de código de Validação de Destinatário em várias linguagens. Aqui está nosso pedido para você.

Deixe-nos saber se você acha que esquecemos sua linguagem favorita. Pode ser que não tenhamos tantos exemplos quanto O Projeto Fibonacci, mas adoraríamos adicionar mais alguns. Além disso, se você achar que nossos exemplos podem ser melhorados, nos avise!

Neste artigo, discutimos exemplos de código de Validação de Destinatário em várias linguagens. Aqui está nosso pedido para você.

Deixe-nos saber se você acha que esquecemos sua linguagem favorita. Pode ser que não tenhamos tantos exemplos quanto O Projeto Fibonacci, mas adoraríamos adicionar mais alguns. Além disso, se você achar que nossos exemplos podem ser melhorados, nos avise!

Neste artigo, discutimos exemplos de código de Validação de Destinatário em várias linguagens. Aqui está nosso pedido para você.

Deixe-nos saber se você acha que esquecemos sua linguagem favorita. Pode ser que não tenhamos tantos exemplos quanto O Projeto Fibonacci, mas adoraríamos adicionar mais alguns. Além disso, se você achar que nossos exemplos podem ser melhorados, nos avise!

Outras notícias

Leia mais desta categoria

A person is standing at a desk while typing on a laptop.

A plataforma completa nativa de IA que escalará com o seu negócio.

© 2025 Pássaro

A person is standing at a desk while typing on a laptop.

A plataforma completa nativa de IA que escalará com o seu negócio.

© 2025 Pássaro