Bir e-posta adresi PHP geçerli olduğunu doğrulamak için ne kadar kolay?

7 Cevap php

Bir e-posta adresi önüne alındığında, nasıl geçerli olduğunu doğrulayabilirsiniz? (E-postanın domain adresi için e-postaları kabul edecektir bu.)

Bu nasıl PHP bakmak istiyorsunuz?

Note: Ben e-posta adresi itself sözdizimsel geçerli olduğunu verfify istemiyorum. Ben bilmek istiyorum adrese alanı olacak accept e-posta olsun.

Ben bir MX kaydının veya bir şey ile bunun için bazı yolu var olduğunu sanırdım ...

7 Cevap

Ben senin tek seçenekleri SMTP RCPT TO veya VRFY komutları olacağını düşünüyorum.

RCPT TO could sürece bunu veren sonra kesin olarak kontrol etmek için bir yol olabilir. Hesap yoksa Ancak tüm sunucuları (UCE önleme, catch-all adresleri, vb ..) size boot edecektir.

VRFY bir hesap sunucuda var olmadığını size söyleyebilir, ama bu hemen hemen her zaman hesap sondaları önlemek için devre dışı bırakılır.

(Diğer yöntemler arasında) doğrulamaya RCPT yapan bir PHP sınıfı: http://code.google.com/p/php-smtp-email-validation/

Özellikle devlet yana

E-postanın domain adresi için e-posta kabul edeceğini.

düzenli ifade size yardımcı oluyor. Doğrulamak için tek yol adresine bir e-posta göndermek için çalışın ve sekerek olmadığını görmektir. Posta sunucu hatası bildirimleri göndermek olmayabilir çünkü öyle olsa bile, sen, yanlış pozitif alabilir.

PHP ile bu gibi temel bir e-posta göndererek oldukça basittir; mail() fonksiyonu için belgeleri kontrol here.

Sunucu bunu kabul edecek eğer gerçekten kontrol edemez. Posta sunucusu ait olduğunu işlemek için bir API yoktur.

MX sunucuya bağlanmak için çalıştı, ve bunun yerine sadece bir değil, kullanımda posta kutusu olarak reddetme, bir şifre istediğini belirtti sunucudan yanıt çeşit için baktım bir komut olarak kullanılan. Bu ancak çok kötü bir uygulamadır.

Hemen hemen yapabileceğiniz tek şey, geçerli bir e-posta adresi için kontrol edin ve en iyi için umut etmektir:

http://www.linuxjournal.com/article/9585

Bu aslında RFC standartları takip öğreticiler biridir.

/**
Validate an email address.
Provide email address (raw input)
Returns true if the email address has the email 
address format and the domain exists.
*/
function validEmail($email)
{
   $isValid = true;
   $atIndex = strrpos($email, "@");
   if (is_bool($atIndex) && !$atIndex)
   {
      $isValid = false;
   }
   else
   {
      $domain = substr($email, $atIndex+1);
      $local = substr($email, 0, $atIndex);
      $localLen = strlen($local);
      $domainLen = strlen($domain);
      if ($localLen < 1 || $localLen > 64)
      {
         // local part length exceeded
         $isValid = false;
      }
      else if ($domainLen < 1 || $domainLen > 255)
      {
         // domain part length exceeded
         $isValid = false;
      }
      else if ($local[0] == '.' || $local[$localLen-1] == '.')
      {
         // local part starts or ends with '.'
         $isValid = false;
      }
      else if (preg_match('/\\.\\./', $local))
      {
         // local part has two consecutive dots
         $isValid = false;
      }
      else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))
      {
         // character not valid in domain part
         $isValid = false;
      }
      else if (preg_match('/\\.\\./', $domain))
      {
         // domain part has two consecutive dots
         $isValid = false;
      }
      else if
(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
                 str_replace("\\\\","",$local)))
      {
         // character not valid in local part unless 
         // local part is quoted
         if (!preg_match('/^"(\\\\"|[^"])+"$/',
             str_replace("\\\\","",$local)))
         {
            $isValid = false;
         }
      }
      if ($isValid && !(checkdnsrr($domain,"MX") || 
 ↪checkdnsrr($domain,"A")))
      {
         // domain not found in DNS
         $isValid = false;
      }
   }
   return $isValid;
}

Bir e-posta teslim edilmesi mümkün olduğundan emin yapma yolunda, doğrulamaları almak için gidiyoruz gibi yaklaşık olarak iyidir.

Bir e-posta adresi geçerli olduğunu doğrulamak için ne kadar kolay?

Not easy at all. herhangi bir dilde muhtemelen en eksiksiz e-posta doğrulama kütüphanesi PHP, içinde Dominic Sayers' email validation bir göz atın. Ayrıca DNS kontrolünü içerir.

Ayrıca this related article from Jeff Atwood e-posta gelişini garanti etmek için gerekli kontroller hakkında bkz.

(Sözdizimsel) geçerli bir e-posta Varlık e-postaları kabul olarak aynı değildir. Etki size MX doğrudan e-posta göndererek denemek zorunda, ama SMTP sunucusu tarafından kabul ise o zaman bile, bunu sonradan reddetti olmayacak garanti edilmez e-postaları kabul edecek olup olmadığını kontrol etmek için, yani olmayan bir teslim raporu gönderilecektir. Eğer adresleri dinamik bir havuzda veya DNS ters varsa ve SMTP sunucusu muhtemelen e-postayı reddedecektir

PHP 5.2.x kullanıyorsanız, artık özel doğrulama işlevleri kullanmak gerek yoktur. PHP built in fonksiyonu ile birlikte geliyor