Encontrei este código PHP para verificar o endereço de email usando SMTP sem enviar um email .
Alguém já tentou algo semelhante ou funciona para você? Você pode dizer se um cliente / usuário de e-mail digitado está correto e existe?
Encontrei este código PHP para verificar o endereço de email usando SMTP sem enviar um email .
Alguém já tentou algo semelhante ou funciona para você? Você pode dizer se um cliente / usuário de e-mail digitado está correto e existe?
Respostas:
Às vezes, existem dois métodos que você pode usar para determinar se um destinatário realmente existe:
Você pode se conectar ao servidor e emitir um
VRFY
comando. Pouquíssimos servidores suportam esse comando, mas o objetivo é exatamente isso. Se o servidor responder com um DSN 2.0.0, o usuário existe.Você pode emitir um
RCPT
e ver se o email foi rejeitado.Se o usuário não existir, você receberá um DSN 5.1.1. No entanto, apenas porque o email não foi rejeitado, não significa que o usuário exista. Alguns servidores descartam silenciosamente solicitações como essa para impedir a enumeração de seus usuários. Outros servidores não podem verificar o usuário e precisam aceitar a mensagem independentemente.
Há também uma técnica antispam chamada greylisting, que fará com que o servidor rejeite o endereço inicialmente, esperando que um servidor SMTP real tente uma entrega novamente algum tempo depois. Isso atrapalhará as tentativas de validar o endereço.
Honestamente, se você está tentando validar um endereço, a melhor abordagem é usar uma regex simples para bloquear endereços obviamente inválidos e, em seguida, enviar um email real com um link para o seu sistema para validar o recebimento do email. Isso também garante que o usuário inseriu o e-mail real, não um pequeno erro de digitação que pertença a outra pessoa.
fonte
Outras respostas aqui discutem os vários problemas ao tentar fazer isso. Pensei em mostrar como você pode tentar isso, caso queira aprender fazendo você mesmo.
Você pode se conectar a um servidor de email via telnet para perguntar se existe um endereço de email. Aqui está um exemplo de teste de um endereço de email para
stackoverflow.com
:Linhas prefixadas com códigos numéricos são respostas do servidor SMTP. Eu adicionei algumas linhas em branco para torná-lo mais legível.
Muitos servidores de email não retornam essas informações como forma de impedir a coleta de endereços de email por remetentes de spam, portanto, você não pode confiar nessa técnica. No entanto, você pode ter algum êxito na limpeza de alguns endereços de email obviamente ruins, detectando servidores de email inválidos ou tendo os endereços de destinatários rejeitados como acima.
Observe também que os servidores de email podem colocar você na lista negra se você fizer muitos pedidos.
No PHP eu acredito que você pode usar
fsockopen
,fwrite
efread
para executar os passos acima programaticamente:fonte
A resposta geral é que você não pode verificar se existe um endereço de email, se você enviar um email para ele: ele pode entrar em um buraco negro.
Dito isto, o método descrito é bastante eficaz. É usado no código de produção no ZoneCheck, exceto pelo uso do RSET em vez de QUIT.
Onde a interação do usuário com a caixa de correio não é muito cara, muitos sites realmente testam se o email chega a algum lugar enviando um número secreto que deve ser enviado de volta ao emissor (acessando um URL secreto ou enviando esse número secreto por email). A maioria das listas de discussão funciona assim.
fonte
Na verdade, não ... Alguns servidores podem não marcar o "rcpt to:"
http://www.freesoft.org/CIE/RFC/1123/92.htm
Fazer isso é um risco à segurança ...
Se o servidor o fizer, você pode escrever um bot para descobrir todos os endereços no servidor ....
fonte
Isso falhará (entre outros casos) quando o servidor de email de destino usar a lista cinza.
Lista de cinzas : o servidor SMTP recusa a entrega na primeira vez em que um cliente anteriormente desconhecido se conecta, permite a próxima vez; isso mantém alguma porcentagem de spambots, enquanto permite o uso legítimo - como é esperado que um remetente legítimo de e-mail tente novamente , que é o que os agentes normais de transferência de mensagens farão.
No entanto, se o seu código apenas verificar o servidor uma vez , um servidor com lista cinza negará a entrega (como seu cliente está se conectando pela primeira vez); a menos que você verifique novamente em alguns instantes, você pode estar rejeitando incorretamente endereços de email válidos.
fonte
Alguns problemas:
Para alguns servidores SMTP (como o gmail), você precisa usar SSL para fazer qualquer coisa.Isso só é verdade ao usar o servidor SMTP do gmail para enviar email.fonte
Embora essa pergunta seja um pouco antiga, essa dica de serviço pode ajudar os usuários a procurar uma solução semelhante para verificar endereços de email além da validação de sintaxe antes do envio.
Eu tenho usado esse serviço de código aberto para uma validação mais aprofundada de emails (verificação de registros mx no domínio do endereço de email etc.) em alguns projetos com bons resultados. Ele também verifica erros de digitação comuns, o que é bastante útil. Demonstração aqui .
fonte
"Você pode dizer se um cliente / usuário de email entra está correto e existe?"
Na verdade, essas são duas coisas separadas. Pode existir mas pode não estar correto.
Às vezes, é necessário considerar as entradas do usuário pelo valor nominal. Existem muitas maneiras de derrotar o sistema.
fonte
Tudo o que você pode fazer é pesquisar no DNS e garantir que o domínio que está no endereço de email tenha um registro MX, exceto que não existe uma maneira confiável de lidar com isso.
Alguns servidores podem funcionar com o método rcpt-to no qual você fala com o servidor SMTP, mas isso depende inteiramente da configuração do servidor. Outro problema pode ser que um servidor sobrecarregado possa retornar um código 550 dizendo que o usuário é desconhecido, mas esse é um erro temporário, há um erro permanente (451, eu acho?) Que pode ser retornado. Isso depende inteiramente da configuração do servidor.
Pessoalmente, verificaria o registro MX do DNS e enviaria uma verificação por e-mail se o registro MX existir.
fonte
fonte
getmxrr
Supondo que seja o endereço do usuário , alguns servidores de email permitem que o comando SMTP VRFY verifique o endereço de email nas caixas de correio. A maior parte do site principal não fornece muitas informações; a resposta do gmail é "se você tentar enviá-lo, tentaremos entregá-lo" ou algo inteligente como esse.
fonte
Eu acho que você não pode, existem muitos cenários em que até o envio de um email pode falhar. Por exemplo. o servidor de correio no lado do usuário está temporariamente inoperante, a caixa de correio existe, mas está cheia; portanto, a mensagem não pode ser entregue etc.
É provavelmente por isso que muitos sites validam um registro depois que o usuário confirma que recebeu o email de confirmação.
fonte
Posso confirmar as respostas de Joseph e Drew para usar
RCTP TO: <address_to_check>
. Gostaria de acrescentar alguns pequenos adendos sobre essas respostas.Fornecedores abrangentes
Alguns provedores de correio implementam uma política abrangente, o que significa que
*@mydomain.com
retornará positivo para oRCTP TO:
comando. Mas isso não significa necessariamente que a caixa de correio "exista", como em "pertence a um ser humano". Nada muito pode ser feito aqui, apenas esteja ciente.Lista negra / lista negra de IP
Lista cinza: a 1ª conexão de IP desconhecido está bloqueada. Solução: tente novamente pelo menos 2 vezes.
Lista negra: se você enviar muitas solicitações do mesmo IP, esse IP será bloqueado. Solução: use rotação IP; Reacher usa Tor.
Solicitações HTTP em formulários de inscrição
Isso é muito específico do provedor, mas às vezes você pode usar solicitações HTTP bem criadas e analisar as respostas dessas solicitações para verificar se um nome de usuário já se inscreveu ou não nesse provedor.
Aqui está a função relevante de uma biblioteca de código aberto que escrevi para verificar
*@yahoo.com
endereços usando solicitações HTTP: verifique se existe um email . Eu sei que meu código é Rust e esse tópico está marcado como PHP, mas as mesmas idéias se aplicam.Caixa de entrada completa
Pode ser um caso delicado, mas quando o usuário tiver uma caixa de entrada cheia,
RCTP TO:
retornará uma5.1.1 DSN
mensagem de erro dizendo que está cheia. Isso significa que a conta realmente existe!Divulgação
Eu corro Reacher , um tempo real de verificação de e-mail API. Meu código está escrito em Rust e é 100% de código aberto. Confira se você deseja uma solução mais robusta:
Github: https://github.com/amaurymartiny/check-if-email-exists
Com uma combinação de várias técnicas para avançar, consigo verificar cerca de 80% dos e-mails que meus clientes verificam.
fonte
fonte