Dentre as validações de dados fornecidos pelo usuário, é comum precisarmos validar formato de e-mails em formulários. Validar que a entrada corresponde ao padrão esperado é importante para evitar exceções por endereço inválido, aumentar as taxas de entrega, construir a reputação do remetente e melhorar as taxas de conversão. Felizmente, Ruby on Rails fornece várias técnicas para validar e-mails e melhorar sua capacidade de entrega. O método que você escolher dependerá de suas preferências e facilidades. Neste artigo, vamos explorar diferentes métodos para realizar a validação de e-mail no Rails.
Validando formato de e-mail no Rails: Regex e Gems
Geralmente, um endereço de e-mail válido pode ser dividido em 3 partes:
- nome identificador do usuário
- o símbolo “at” (@)
- o domínio
Se esse formato não for aderido, o endereço de email se torna inválido. As definições formais do formato estão contidas nos documentos RFC 5322 e RFC 5321.
Na maioria dos casos, o nome identificador do usuário pode utilizar qualquer um dos caracteres ASCII padrões:
- dígitos — 0 a 9
- letras minúsculas e maiúsculas — a a z e A a Z
- caracteres imprimíveis — !#$%&’*+-/=?^_`{|}~
- ponto — . (deve ser usado no meio da cadeia de caracteres, e não como inicial ou final)
Além disso, o domínio pode utilizar os caracteres abaixo:
- dígitos — 0 a 9
- letras minúsculas e maiúsculas — a a z e A a Z
- hífen ou ponto — – / . (também não podem ser caracteres iniciais ou finais)
Técnicas de Validação de E-mail no Rails
Como mencionado anteriormente, há muitas técnicas para validar os endereços em Ruby on Rails. Neste artigo, vamos explorar quatro:
- Regex (expressões regulares)
- Validação do Active Record
- Gem Email_validator
- Gem Truemail
Regex
Uma expressão regular, geralmente abreviada para regex, refere-se a uma sequência de caracteres que permite definir padrões para correspondência, localização e gerenciamento de textos. Você pode usar regex para verificar se o formato do endereço de e-mail fornecido é válido ou não. Você pode criar qualquer tipo de regex para validar formatos de e-mail. Por exemplo, aqui está um padrão regex simples que verifica se um endereço de e-mail tem o símbolo ‘@’. Neste caso, as demais condições para um endereço de email válido não serão consideradas.
Vamos ver como pode ser implementado em código Ruby:
Como você pode ver no código acima, criamos uma função que usa o padrão regex para determinar se o endereço de e-mail fornecido é válido. Se o código for executado, ele produzirá um email válido, indicando que o endereço de email fornecido está na sintaxe adequada. A seguir, vamos melhorar o padrão regex adicionando algumas limitações a serem aplicadas às seções local e de domínio.
Estas são as restrições que queremos aplicar:
- A-Z é permitido
- a-z é permitido
- 0-9 é permitido
- Underscore(_), hífen(-), e ponto(.) são permitidos
- Quaisquer outros caracteres não são permitidos
A expressão regular fica assim:
O código em Ruby fica assim:
Se o código acima for executado, resultará em E-mail inválido, indicando que o endereço de email fornecido não está na sintaxe necessária. Por último, vamos melhorar o padrão regex adicionando uma limitação à seção de nome de domínio.
Estas são as restrições que queremos aplicar:
- O nome do domínio deve conter pelo menos um ponto(.)
- A parte do domínio após o último ponto deve conter apenas letras
- A parte do domínio que indica o tipo (como .com ou .org) deve conter pelo menos 2 a 6 caracteres
A expressão regular atualizada:
O código em Ruby:
Uma grande facilidade do Ruby on Rails é que ele fornece auxiliares de validação do Active Record que permitem a você validar o estado dos objetos antes de serem processados. Você pode usá-los para criar seus próprios métodos de validação de e-mail e exibir mensagens de erro aos usuários. Por exemplo, você pode usar o format helper para verificar se um endereço de e-mail corresponde ao padrão regex fornecido, que é definido usando a opção: with .
Vamos ver como você pode adicionar o auxiliar ao seu model:
Como você pode ver no código acima, se o Active Record realizou a validação, e o endereço de e-mail é inválido, a mensagem de erro especificada usando a opção message será exibida para o usuário. Observe que especificamos o padrão regex usado anteriormente neste artigo. Além disso, adicionamos os auxiliares uniqueness e length para confirmar a exclusividade e o comprimento do endereço de e-mail fornecido, respectivamente.
Email_validator gem
Há muitas gems Ruby disponíveis para auxiliar nessa validação. Por exemplo, uma de simples utilização é a email_validator. Para utilizá-la, adicione-a ao seu Gemfile:
Depois, execute o Bundler para fazer a instalação:
Então você pode adicioná-la ao seu atributo no model:
Simples assim! Essa gem fornece uma técnica de validação de e-mail simples, verificando se há um sinal de arroba (@) com alguns caracteres antes ou depois dele. Se o sinal estiver presente, ele retorna, verdadeiro; caso contrário, retorna falso. Fornecer essa validação de e-mail simples evita o risco de rejeitar um endereço de e-mail que pode parecer ter caracteres estranhos, mas na verdade é válido. Ele também evita o aborrecimento de procurar o padrão regex perfeito para validar endereços de e-mail.
Truemail gem
Truemail é outra gem que você pode usar para validar endereços de e-mail. Ele fornece mais recursos de validação do que a gem email_validator . Com a gem Truemail Ruby, você pode verificar a validade de um endereço de e-mail via regex, SMTP ou DNS. Mostraremos como usá-la para verificar e-mails por meio de um padrão regex.
Para começar a usar esta gema, adicione-a ao seu Gemfile:
Você também precisará configurá-la de acordo com as instruções da documentação. Aqui um exemplo de como você pode fazer a validação com regex:
Você também pode usar o método .valid? que é um atalho para o método validate . O helper retorna um boolean, em vez do objeto de validação. Exemplo:
Observe que o Truemail vem com um padrão regex padrão para validar endereços de e-mail. Portanto, você pode fornecer sua própria regex para substituir seu padrão.
Concluindo
Sendo uma demanda de uso comum, existem muitas opções de como implementar essa validação. Tenha em mente que a validação do formato não valida que o endereço recebedor existe (até mesmo por questões de falha de digitação e afins). Para isso, a utlização de confirmação do usuário via recebimento de email em sua caixa de entrada é uma forma de garantir a validade desses recebedores e que os emails disparados com destino aos mesmos tenham uma boa taxa de conversão, evitando que você caia em blacklists.
Quaisquer dúvidas ou sugestões, utilize a área de comentários ou entre em contato!
Nenhum Comentário