Product
Acabamos de lançar o flanker em código aberto, nossa biblioteca em Python de análise de MIME e endereços de e-mail
Em junho, lançamos o nosso serviço de validação de endereços Guardpost. Desde então, muitos clientes do Mailgun vêm usando o Guardpost para validar seus endereços de e-mail e reduzir seus cadastros falsos, bem como as taxas de devolução. Em junho, prometemos que lançaríamos em código aberto nossa biblioteca de análise de MIME e endereços escrita em Python, e é isso que estamos fazendo hoje. Continue lendo para ver os detalhes ou, se quiser ir direto ao ponto, aqui está o repositório no Github, que inclui um Guia de início rápido, Manual do usuário e Guia de API. Você também pode instalar o flanker via pip.
Apresentamos o Flanker
O Flanker consiste em duas partes:
- mime: esta é a nossa biblioteca de análise de MIME. Por que isso é tão incrível? Nossa biblioteca de análise de MIME pode ser até 20x mais rápida dependendo do seu conjunto de dados.
- addresslib: esta é a biblioteca de análise de endereços que é a base do Guardpost . Você pode usá-la para analisar endereços ou listas de endereços com base estritamente na gramática RFC, ou para validar endereços e listas com base nas verificações adicionais. As verificações adicionais incluem pesquisa de DNS, existência de MX, gramática específica do provedor de serviços de e-mail (ESP) e correção ortográfica.
Mais sobre Mime
O Mailgun analisa muito MIME e, portanto, requer um pacote de manipulação de MIME rápido e eficiente. Quando iniciamos o Mailgun, usamos a biblioteca de análise padrão do Python, mas logo percebemos que precisávamos de algo mais previsível. Como a biblioteca padrão era bastante rápida para mensagens pequenas, mas muito pior para mensagens maiores, nós escrevemos o Flanker. Onde o flanker realmente se destaca é na análise de cabeçalhos. O Flanker não analisa a mensagem inteira se o seu interesse for apenas nos cabeçalhos; isso dá a você acesso rápido a eles se a sua mensagem MIME for de 1 KB ou 10 MB. Dependendo da mensagem MIME processada, o flanker.mime pode ser até 20x mais rápido que o pacote padrão de análise de MIME do Python, usar ~50% menos memória e fazer até 730x menos chamadas de função. Você pode ver todos os benchmarks que executamos aqui.
O que mais há de diferente entre o flanker.mime e o email.parser?

Mais sobre o addresslib
A análise no addresslib é um recurso muito poderoso e você pode explorar a documentação para ver tudo o que pode fazer. Outro recurso muito legal do addresslib é a função de validação. Esta é uma parte importante do nosso serviço de verificação de e-mail.
A validação inclui as etapas de análise descritas na documentação, além de:
Pesquisa de DNS
Depois que um endereço é analisado, o validador tenta fazer uma pesquisa de DNS no domínio. Os registros MX são verificados primeiro; se não existirem, o validador recorrerá aos registros A. Se não existirem registros MX nem A, o endereço será considerado inválido. Por padrão, o flanker usa a biblioteca dnsq (também escrita pelo Mailgun) para realizar pesquisas de DNS; no entanto, o uso do dnsq não é obrigatório. Qualquer biblioteca de pesquisa de DNS pode ser usada, desde que esteja em conformidade com a mesma interface de um dicionário Python. Consulte flanker/addresslib/drivers/dns_lookup.py para ver um exemplo.
Existência de MX
Se a pesquisa de DNS na etapa anterior tiver retornado um registro MX ou A válido, esse endereço será verificado para garantir que um Mail Exchanger responda na porta 25. Se nenhum Mail Exchanger responder, o domínio será considerado inválido. As pesquisas de DNS e verificações de existência de MX são custosas, e o resultado das duas etapas acima pode ser armazenado em cache para melhorar o desempenho. O Flanker, por padrão, usa o Redis para esse cache, mas o uso do Redis não é obrigatório. De forma semelhante à biblioteca de pesquisa de DNS, qualquer cache pode ser usado aqui, desde que a interface seja a mesma de um dicionário Python. Consulte flanker/addresslib/drivers/redis_cache.py para ver um exemplo.
Gramática personalizada
Grandes ESPs raramente (ou nunca) oferecem suporte a toda a gramática que a RFC permite para endereços de e-mail; na verdade, a maioria tem uma gramática bastante restritiva. Por exemplo, um endereço do Yahoo! Mail deve ter entre 4 e 32 caracteres e pode usar apenas caracteres alfanuméricos, ponto (.) e sublinhado (_). Se o Mail Exchanger da etapa anterior for igual ao Mail Exchanger de um ESP, com gramática conhecida, o validador executará essa verificação adicional na parte local do endereço. Gramáticas personalizadas podem ser adicionadas inserindo-se um plug-in do ESP específico no diretório flanker/addresslib/plugins. Consulte o Manual do usuário para obter mais informações.
Sugestão alternativa
Uma etapa separada, mas relacionada, é a correção ortográfica na parte do domínio de um endereço de e-mail. Isso pode ser usado para corrigir erros de digitação comuns, como gmal.com em vez de gmail.com. O corretor ortográfico usa o difflib, que usa o Ratcliff-Obershelp como algoritmo para calcular a similaridade de duas strings. Este é um algoritmo muito rápido e preciso para correção ortográfica de domínio. Consulte a nossa post anterior sobre este tópico.
Próximos passos
Você pode fazer um fork do flanker e começar a usá-lo hoje mesmo. Estamos muito empolgados em ver a comunidade usando e contribuindo com ele. Como o Flanker é uma parte fundamental do Mailgun, isso significa que nós o manteremos e melhoraremos ativamente enquanto existirmos.
Áreas onde você pode contribuir:
Queremos muito incentivar novos profissionais de desenvolvimento a contribuir com o Flanker e com softwares de código aberto em geral. Aqui estão dois itens no nosso roteiro que são fáceis de resolver e onde novos profissionais podem se envolver e começar a contribuir:
- Mais gramática específica de ESP. Só conseguimos cobrir um número limitado de ESPs. Se você sabe o que o seu ESP permite para as partes locais, contribua com um plug-in. Esta é uma ótima maneira de começar a aprender sobre gramática e análise sintática.
- Correção automática de erros. Algumas coisas que vêm à mente: se você esquecer de fechar o seu endereço de e-mail com um colchete angular (<), o validador deve detectar e corrigir isso para você. Se você esquecer de colocar entre aspas um caractere especial como um parêntese em seu nome de exibição, devemos colocá-lo entre aspas para você, garantindo que ele seja renderizado corretamente por clientes de e-mail.
Bom envio!
Os Mailgunners