Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server – Como validar e-mail e o domínio do e-mail utilizando SQLCLR (C#)

Visualizações: 1.500 views
Tempo de Leitura: 4 minutos

Introdução

Fala pessoal!
Imagino que em algum momento, você já deve ter precisado verificar um ou mais e-mails no SQL Server, para saber se o e-mail é válido.

Vocês já devem ter pensado validar o domínio do e-mail, para saber se o domínio é válido. Não estou me referindo a saber se o domínio foi digitado corretamente e não possui caracteres especiais, por exemplo, e sim retornar se o domínio realmente existe: [email protected] é válido, mas [email protected] não é, por exemplo.

Veremos agora nesse post, como é possível fazer isso pelo SQL Server

Importante: Para saber mais sobre SQLCLR e entender o que ele é e como ele funciona, leia o artigo Introdução ao SQL CLR (Common Language Runtime) no SQL Server ou acesse a Categoria de CLR e veja tudo o que já fiz utilizando essa extensão do SQL Server.

Como validar e-mail no SQL Server

Já havia demonstrado outra solução para validação de e-mail no artigo Validando CPF, CNPJ, E-mail, Telefone e CEP no SQL Server, utilizando apenas a função LIKE do SQL e algumas expressões regulares. Mas a validação acabou não ficando 100%, porque existiam alguns casos em que e-mails inválidos estavam sendo classificados como válidos, como [email protected].

Domínios não podem ter hifens como primeira ou última letra e isso eu corrigi nessa nova função.

Código-fonte da função fncValida_Email.cs
Clique aqui para visualizar o código-fonte

Exemplo de uso:

Importante: Para saber mais sobre expressões regulares no SQL Server, leia o artigo SQL Server – Como utilizar expressões regulares (RegExp) no seu banco de dados.

Como validar o domínio do e-mail no SQL Server

Outra necessidade que pode ser bem comum, é a de validar o domínio do e-mail, isto é, saber se [email protected] realmente existe ou foi digitado incorretamente.

Existem algumas regras que seguem a RFC 5321 para definir que domínios não podem ter hifens como primeira ou última letra, por exemplo e poderiam ser usadas para saber se um domínio está seguindo essas regras, mas isso não quer dizer que o domínio realmente existe.

Para resolver esse problema de uma forma mais precisa, resolvi criar uma função SQLCLR que faça uma requisição ao domínio utilizando o comando nslookup e retorna se os registros MX retornados desse domínio são válidos ou não.

Código-fonte da função fncValida_Email_Dominio.cs
Clique aqui para visualizar o código-fonte

Exemplo de utilização

Importante: Como a função fncValida_Email_Dominio precisa de acessar recursos externos, a propriedade PERMISSION_SET na criação do Assembly não pode ser definida como SAFE. Eu tentei criar como EXTERNAL_ACCESS, mas devido ao uso da classe Process, da biblioteca System.Diagnostics, o Assembly passa a usar código não-gerenciado, e isso só é permitido com a permissão UNSAFE na criação do Assembly.

Por conta da permissão UNSAFE, caso a versão do SQL Server seja abaixo da 2017, a propriedade TRUSTWORTHY do banco será alterada para True, para que seja possível utilizar esse Assembly. Caso a versão do SQL Server igual ou acima da 2017, isso não será necessário, pois o Assembly será adicionado na lista de trusted_assemblies.

Para entender os riscos dessa propriedade TRUSTWORTHY habilitada, leia o artigo SQL Server – Entendendo os riscos da propriedade TRUSTWORTHY habilitada em um database ou faça o meu curso de Segurança de SQL Server.

Como criar esses objetos no meu banco de dados

Gostou dessas duas funções? Então vamos implementá-las no seu banco de dados e para isso, preparei um script bem fácil para você.

Clique aqui para visualizar o código-fonte

Basta copiar esse código, colar no seu SQL Server Management Studio (SSMS) e apertar F5. E é só isso. Agora é só começar a usar conforme os exemplos que demonstrei nesse post.

Espero que tenham gostado dessa dica e até o próximo post.