Bir e-posta adresi bir e-posta göndererek olmadan var olmadığını nasıl kontrol edebilirim?

12 Cevap php

Ben bu PHP code to check email address using SMTP without sending an email rastlamak var.

Herkes benzer bir şey çalıştı ya da sizin için çalışır? Bir e-posta müşteri / kullanıcı girerse söyleyebilir doğru olduğunu ve var?

12 Cevap

Eğer sometimes bir alıcı gerçekten olup olmadığını belirlemek için kullanabileceğiniz iki yöntem vardır:

  1. Sen sunucuya bağlanmak ve bir VRFY komutu verebilirsiniz. Çok az sunucusu bu komutu desteklemez, ama tam olarak bunun için tasarlanmıştır. Sunucu 2.0.0 DSN ile yanıt verirse, kullanıcı var.

    Kullanıcı doğrulanamıyor

  2. Eğer bir RCPT sorunu ve posta reddedilmesi halinde görebilirsiniz.

    MAIL FROM: <>

    RCPT TO:

Kullanıcı yoksa, bir 5.1.1 DSN alırsınız. Ancak, e-posta reddedilir değil, sırf kullanıcı var anlamına gelmez. Bazı sunucu sessizce kendi kullanıcılarının numaralandırma önlemek için bu gibi istekleri atar. Diğer sunucular kullanıcıyı doğrulamak ve ne olursa olsun mesajı kabul etmek olamaz.

Burada Diğer yanıtlar bunu yapmak için çalışırken, çeşitli sorunları tartışmak. Ben size bunu kendiniz yaparak öğrenmek istedim durumda bu deneyebilirsiniz nasıl göstermek düşündüm.

Bir e-posta adresi var olup olmadığını sormak için telnet ile bir posta sunucusuna bağlanabilirsiniz. İşte bir e-posta adresi test örneği stackoverflow.com:

C:\>nslookup -q=mx stackoverflow.com
Non-authoritative answer:
stackoverflow.com       MX preference = 40, mail exchanger = STACKOVERFLOW.COM.S9B2.PSMTP.com
stackoverflow.com       MX preference = 10, mail exchanger = STACKOVERFLOW.COM.S9A1.PSMTP.com
stackoverflow.com       MX preference = 20, mail exchanger = STACKOVERFLOW.COM.S9A2.PSMTP.com
stackoverflow.com       MX preference = 30, mail exchanger = STACKOVERFLOW.COM.S9B1.PSMTP.com

C:\>telnet STACKOVERFLOW.COM.S9A1.PSMTP.com 25
220 Postini ESMTP 213 y6_35_0c4 ready.  CA Business and Professions Code Section 17538.45 forbids use of this system for unsolicited electronic mail advertisements.

helo hi
250 Postini says hello back

mail from: <me@myhost.com>
250 Ok

rcpt to: <fake@stackoverflow.com>
550-5.1.1 The email account that you tried to reach does not exist. Please try
550-5.1.1 double-checking the recipient's email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 w41si3198459wfd.71

Sayısal kodları ile öneki Hatları SMTP sunucusuna gelen tepkilerdir. Ben daha okunabilir hale getirmek için bazı boş satırları ekledi.

Birçok posta sunucuları spam tarafından e-posta adresi hasat karşı önlemek için bir araç olarak bu bilgileri değil dönecektir, bu yüzden bu tekniğe güvenemez. Eğer yukarıdaki gibi reddedilen alıcı adresleri geçersiz posta sunucularını tespit veya sahip bazı açıkçası kötü e-posta adresleri temizleme bazı başarılı olabilir ancak.

Eğer onlardan çok isteklerini yaparsanız çok bu posta sunucuları sizi kara listeye olabilir unutmayın.


PHP Ben programlı yukarıdaki adımları gerçekleştirmek için fsockopen, fwrite ve fread kullanabilirsiniz inanıyorum:

$smtp_server = fsockopen("STACKOVERFLOW.COM.S9A1.PSMTP.com", 25, $errno, $errstr, 30);
fwrite($smtp_server, "helo hi\r\n");
fwrite($smtp_server, "mail from: <me@myhost.com>\r\n");
fwrite($smtp_server, "rcpt to: <fake@stackoverflow.com>\r\n");

Genel cevabı ona bir e-posta göndermek eğer bir e-posta adresi olay varsa eğer not kontrol edebilirsiniz ki: Bu sadece bir kara deliğin içine gidebiliriz.

Bu varlık yöntem oldukça etkili olduğunu tarif söyledi. Bu yerine ÇIK arasında RSET kullanması dışında ZoneCheck in üretim kodu kullanılır.

Onun posta kutusu ile kullanıcı etkileşimi overcostly birçok site aslında posta (gizli bir URL'ye giderek veya e-posta yoluyla bu gizli numarayı geri göndererek ya) geri yayıcısına gönderilmesi gerekir gizli numara göndererek yere varmak olduğunu test değil nerede. Çoğu e-posta listeleri gibi çalışır.

Bazı konular:

  1. Bazı SMTP sunucuları, onlara bir adres yoksa hemen bildireceğiz eminim, ama bazı gizlilik önlemi olarak olmaz. Onlar sadece onlara ve sessizce yoktur olanları görmezden giderir olursa olsun kabul edeceğiz.
  2. Makale dediği gibi bazı sunucuları ile çok sık bunu yaparsan, onlar da seni kara listeye alır.
  3. For some SMTP servers (like gmail), you need to use SSL in order to do anything. This is only true when using gmail's SMTP server to send email.

Gerçekten ..... Bazı sunucu "için RCPT:" kontrol olmayabilir

http://www.freesoft.org/CIE/RFC/1123/92.htm

Aksi takdirde güvenlik riski oluşturuyor .....

Sunucu yaparsanız, keşif için sunucuda her adresi bir bot yazabilirsiniz ....

"Doğru ve var olan bir e-posta müşteri / kullanıcı girerse söyleyebilir misin?"

Aslında bu iki ayrı şeylerdir. Bu exist, ancak doğru olmayabilir olabilir.

Bazen yüz değer kullanıcı girişleri almak zorunda. Aksi sistemi yenmek için birçok yol vardır.

O the user's adresi olduğunu varsayarsak, bazı mail sunucuları için SMTP VRFY komutu aslında kendi posta kutularına karşı e-posta adresinizi doğrulamak izin veriyoruz. Büyük bir site çoğu size çok bilgi vermez; gmail yanıt veya böyle akıllıca bir şey "bunu posta çalışırsanız, biz teslim çalışacağım" dir.

Hakkında yapabileceğiniz tüm arama DNS ve e-posta adresi ile uğraşan hiçbir güvenilir bir yol olduğunu başka bir MX kaydı, sahip olduğu etki sağlamak.

Bazı sunucular SMTP sunucuya konuşmak rcpt-to yöntemi ile çalışabilir, ancak sunucunun yapılandırmasına bağlıdır. Başka bir sorun, bir aşırı sunucu bilinmeyen kullanıcı olduğunu söyleyerek bir 550 kodu döndürebilir olabilir, ancak bu geçici bir hatadır, iade edilebilir (451 sanırım?) Kalıcı bir hatası var. Bu entirely sunucusunun yapılandırmasına bağlıdır.

Ben şahsen MX kaydı varsa daha sonra bir e-posta doğrulama göndermek, DNS MX kaydı için kontrol.

Ben hatta bir e-posta başarısız olabilir göndererek bu kadar çok senaryo var, bunu yapamazsınız düşünüyorum. Örn. kullanıcı tarafında üzerinde posta sunucusu geçici olarak aşağı, posta kutusu var ama çok mesaj vs, teslim edilemez dolu

Kullanıcı onlar onay e-posta aldım onaylandıktan sonra pek çok site bir kayıt doğrulamak yüzden muhtemelen.

ciddi bir SMTP sunucu adresleri var ne size verecektir. Bu sadece spam var ne adres bulmak için izin verecek.

Hedef postasunucusu Greylisting kullanıyorsa bu diğer durumlarda (arasında) başarısız olacaktır.

Greylisting: SMTP sunucusu, teslim önceden bilinmeyen bir istemci bağlandığında ilk defa reddediyor sefere (ler) sağlar; as it is expected that a legitimate mail sender will retry, normal bir mail transfer ajanları yapacağım - meşru kullanımına izin verirken bu, istenmeyen üzerinden belli bir yüzdesini tutar.

(Istemci ilk kez bağlanması gibi) Ancak, sunucu üzerinde kod sadece çek eğer once, Grilisteleme ile bir sunucu teslim inkar edecek; Eğer bir süre sonra yeniden kontrol sürece, yanlış geçerli bir e-posta adreslerini reddediyor olabilir.

Ben size bu kontrol için izin verirse, bu SMTP sunucusu için kötü bir deneyim olması gerektiğini düşünüyorum. Israrcı kimse yapmanın riski gerektiğini artık yasaktır.