ईमेल भेजे बिना ईमेल एड्रेस मौजूद है या नहीं, इसकी जांच कैसे करें?


123

मैं ईमेल भेजने के बिना एसएमटीपी का उपयोग करके ईमेल पते की जांच करने के लिए इस PHP कोड पर आया हूं ।

किसी ने भी कुछ इसी तरह की कोशिश की है या यह आपके लिए काम करता है? क्या आप बता सकते हैं कि कोई ईमेल ग्राहक / उपयोगकर्ता सही है या मौजूद है?



2
बस सोच रहा था, यह टेलनेट टैग क्यों है?
पिस्कोलो

2
एक PHP लाइब्रेरी है जो वास्तव में ऐसा करती है: github.com/kickboxio/kickbox-php
Dan

किकबॉक्स फ्री नहीं है। यह एपीआई उनकी सेवा से जुड़ने के लिए सिर्फ एक आवरण है।
आशीष वोरा

जवाबों:


92

दो तरीके हैं जो आप कभी-कभी यह निर्धारित करने के लिए उपयोग कर सकते हैं कि कोई प्राप्तकर्ता वास्तव में मौजूद है:

  1. आप सर्वर से कनेक्ट कर सकते हैं, और एक VRFYकमांड जारी कर सकते हैं । बहुत कम सर्वर इस कमांड का समर्थन करते हैं, लेकिन यह वास्तव में इसके लिए है। यदि सर्वर 2.0.0 DSN के साथ प्रतिक्रिया करता है, तो उपयोगकर्ता मौजूद है।

    VRFY user
  2. आप एक जारी कर सकते हैं RCPT, और देख सकते हैं कि क्या मेल अस्वीकार कर दिया गया है।

    MAIL FROM:<>
    RCPT TO:<user@domain>

यदि उपयोगकर्ता मौजूद नहीं है, तो आपको 5.1.1 DSN मिलेगा। हालाँकि, सिर्फ इसलिए कि ईमेल अस्वीकार नहीं किया गया है, इसका मतलब यह नहीं है कि उपयोगकर्ता मौजूद है। कुछ सर्वर चुपचाप अपने उपयोगकर्ताओं की गणना को रोकने के लिए इस तरह के अनुरोधों को छोड़ देंगे। अन्य सर्वर उपयोगकर्ता को सत्यापित नहीं कर सकते हैं और संदेश की परवाह किए बिना स्वीकार करना होगा।

Greylisting नामक एक एंटीस्पैम तकनीक भी है, जो सर्वर को शुरू में पता अस्वीकार करने का कारण बनेगी, उम्मीद है कि वास्तविक SMTP सर्वर कुछ समय बाद पुनः वितरण का प्रयास करेगा। यह पते को मान्य करने के प्रयासों को गड़बड़ कर देगा।

ईमानदारी से, यदि आप एक पते को मान्य करने का प्रयास कर रहे हैं, तो सबसे अच्छा तरीका यह है कि स्पष्ट रूप से अमान्य पते को ब्लॉक करने के लिए एक साधारण रेगेक्स का उपयोग किया जाए, और फिर अपने सिस्टम से लिंक के साथ एक वास्तविक ईमेल भेजें जो ईमेल को मान्य करेगा। यह भी सुनिश्चित करता है कि वे उपयोगकर्ता अपने वास्तविक ईमेल में प्रवेश करते हैं, न कि एक मामूली टाइपो जो किसी और के साथ होता है।


10
कुछ सर्वर भी संदेश को स्वीकार करेंगे, लेकिन बाद में एक त्रुटि संदेश लिफाफे प्रेषक को वापस भेज देंगे, खासकर अगर इसका एक बड़ा संगठन है, जिनके पास अपने स्वयं के मेल सर्वर के साथ कई आंतरिक विभाग हैं। बॉर्डर सर्वर शायद सभी खातों को भी नहीं जानता है।
डेविड मर्टेनसन

3
फिर स्पैमर ईमेल एडियों को सत्यापित करने के लिए इस पद्धति का उपयोग क्यों नहीं करते हैं? मैं इस तथ्य से अलग हूं कि ये तरीके बहुत कम सर्वरों द्वारा समर्थित हैं। या वे करते हैं?
शाहरियार इमानोव

7
@ शेही: वास्तव में स्पैमर इस पद्धति का उपयोग कर सकते हैं, यह बताना मुश्किल है। हालाँकि, क्योंकि स्पैमर इसका उपयोग कर सकते हैं, लगभग सभी मेल सर्वर VRFY को अक्षम कर देते हैं, इसलिए व्यवहार में VRFY संभवतः बेकार है।
सिल्के

2
क्या आप RCPT TO: <user @ domain> का उपयोग करने का एक कोड उदाहरण दे सकते हैं? साभार
पापा डी ब्यू

4
वीआरएफवाई के लिए, जीमेल ने जवाब दिया "कुछ मेल भेजें, मैं अपनी पूरी कोशिश करूंगा" ;-)
आर्मेल लारिसर

46

यहां अन्य उत्तर ऐसा करने की कोशिश के साथ विभिन्न समस्याओं पर चर्चा करते हैं। मुझे लगा कि मैं यह दिखाऊंगा कि आप यह कैसे कर सकते हैं यदि आप इसे स्वयं करना चाहते हैं।

ईमेल पता मौजूद है या नहीं यह पूछने के लिए आप टेलनेट के माध्यम से एक मेल सर्वर से जुड़ सकते हैं। यहाँ के लिए एक ईमेल पते का परीक्षण करने का एक उदाहरण हैstackoverflow.com :

C: \> nslookup -q = mx stackoverflow.com
गैर-आधिकारिक उत्तर:
stackoverflow.com MX वरीयता = 40, मेल एक्सचेंजर = STACKOVERFLOW.COM.S9B2.PSMTP.com
stackoverflow.com MX वरीयता = 10, मेल एक्सचेंजर = STACKOVERFLOW.COM.S9A1.PSMTP.com
stackoverflow.com एमएक्स वरीयता = 20, मेल एक्सचेंजर = STACKOVERFLOW.COM.S9A2.PSMTP.com
stackoverflow.com MX वरीयता = 30, मेल एक्सचेंजर = STACKOVERFLOW.COM.S9B1.PSMTP.com

C: \> टेलनेट STACKOVERFLOW.COM.S9A1.PSMTP.com 25
220 Postini ESMTP 213 y6_35_0c4 तैयार है। CA व्यवसाय और पेशे कोड धारा 17538.45 अवांछित इलेक्ट्रॉनिक मेल विज्ञापनों के लिए इस प्रणाली का उपयोग करने से मना करता है।

हेलो हाय
250 पोस्टिनी कहती है नमस्ते

मेल से: <me@myhost.com>
250 ठीक है

rcpt:: <fake@stackoverflow.com>
550-5.1.1 आपने जिस ईमेल खाते तक पहुँचने की कोशिश की है, वह मौजूद नहीं है। प्रयास करें
550-5.1.1 टाइपोस या के लिए प्राप्तकर्ता के ईमेल पते को डबल-चेक करना
550-5.1.1 अनावश्यक रिक्त स्थान। और जानें
550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 w41si3198459wfd.71

संख्यात्मक कोड के साथ उपसर्गित लाइनें SMTP सर्वर से प्रतिक्रियाएं हैं। मैंने इसे और अधिक पठनीय बनाने के लिए कुछ रिक्त लाइनें जोड़ीं।

कई मेल सर्वर स्पैमर्स द्वारा ईमेल पते की कटाई के खिलाफ रोकथाम के साधन के रूप में इस जानकारी को वापस नहीं करेंगे, इसलिए आप इस तकनीक पर भरोसा नहीं कर सकते। हालाँकि, आपको कुछ स्पष्ट रूप से खराब ईमेल पतों को साफ करने में कुछ सफलता मिल सकती है अमान्य मेल सर्वरों का पता लगाने से, या प्राप्तकर्ता के पते के रूप में ऊपर खारिज कर दिया गया है।

ध्यान दें कि यदि आप उनमें से बहुत अधिक अनुरोध करते हैं तो मेल सर्वर आपको ब्लैकलिस्ट कर सकते हैं।


PHP में मेरा मानना ​​है कि आप उपयोग कर सकते हैं fsockopen, fwriteऔर freadउपरोक्त चरणों को प्रोग्रामेटिक रूप से करने के लिए:

$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");

सलाम! एक समस्या मुझे मिली है, क्या पोर्ट 25 हमेशा कम प्राथमिकता वाले mx रिकॉर्ड के साथ काम करता है ??
ध्रुवनकुमार शाह

@DhruvenkumarShah, माफ करना मुझे नहीं पता। अगर आपको पता चले, तो कृपया फिर से टिप्पणी करें।
ड्रू नोक

नमस्ते, मैं सिर्फ अपने स्वयं के विश्वविद्यालय खाते के लिए एमएक्स रिकॉर्ड के बारे में सब पता लगाने की कोशिश कर रहा था, लेकिन यह 25 के लिए काम नहीं करता था .. लेकिन ऑनलाइन सत्यापन-email.org वेबसाइट ने काम किया .. वे कैसे कर रहे हैं .. मैं क्या आप इसके बारे में जानते हैं अगर मुझे इसका पता चल जाए
ध्रुवनकुमार शाह

1
@DhruvenkumarShah यह कुछ मेल एक्सचेंज सर्वर नाम देता है। मेल एक्सचेंजर्स के लिए जवाब देखें। इसलिए यदि कोई विफल रहता है, तो सूची में से अन्य को काम करना चाहिए।
जनक आर राजपक्ष

वास्तव में बहुत मदद करने के लिए मुझे धन्यवाद .. धन्यवाद सर..मैं इसे पोटीन में कोशिश की और आकर्षण की तरह काम करता है .. धन्यवाद ..
मोहम्मद

8

सामान्य उत्तर यह है कि यदि आप ईमेल भेजते हैं तो आप यह जांच नहीं कर सकते हैं कि क्या आप ईमेल भेजते हैं: यह सिर्फ एक ब्लैक होल में जा सकता है।

कहा जा रहा है कि वहाँ वर्णित विधि काफी प्रभावी है। यह जोनचेक में उत्पादन कोड में उपयोग किया जाता है सिवाय इसके कि यह क्वेट के बजाय RSET का उपयोग करता है।

जहाँ उपयोगकर्ता अपने मेलबॉक्स के साथ संपर्क में नहीं है, कई साइटें वास्तव में परीक्षण करती हैं कि मेल कहीं गुप्त नंबर भेजकर आती है जिसे एमिटर को वापस भेजा जाना चाहिए (या तो किसी गुप्त URL पर जाकर या ईमेल द्वारा इस गुप्त नंबर को वापस भेजकर)। अधिकांश मेलिंग सूचियाँ उसी तरह काम करती हैं।


6

वास्तव में नहीं ..... कुछ सर्वर "rcpt to:" की जांच नहीं कर सकते हैं

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

ऐसा करना सुरक्षा जोखिम है .....

यदि सर्वर करते हैं, तो आप सर्वर पर हर पते की खोज करने के लिए एक बॉट लिख सकते हैं ...।


मैं उस बारे में भी सोच रहा था :)
जनक आर राजपक्ष

6

यह विफल होगा (अन्य मामलों के बीच) जब लक्ष्य मेलस्वर greylisting का उपयोग करता है।

Greylisting : SMTP सर्वर डिलीवरी से इनकार करता है पहली बार एक अज्ञात ग्राहक कनेक्ट होता है, अगली बार अनुमति देता है; यह कुछ प्रतिशत स्पैम्बोट्स को बाहर रखता है, जबकि वैध उपयोग की अनुमति देता है - क्योंकि यह उम्मीद है कि एक वैध मेल प्रेषक पुन: प्रयास करेगा , जो सामान्य मेल ट्रांसफर एजेंट करेगा।

हालांकि, यदि आपका कोड केवल एक बार सर्वर पर जांच करता है, तो ग्रीलेस्टिंग वाला सर्वर डिलीवरी से इनकार करेगा (जैसा कि आपका क्लाइंट पहली बार कनेक्ट कर रहा है); जब तक आप थोड़ी देर में फिर से जांच नहीं करते, तब तक आप गलत तरीके से वैध ई-मेल पते अस्वीकार कर सकते हैं।


(व्यक्तिगत अनुभव: मुझे अपने ई-मेल प्रदाता के साथ आगे-पीछे बहस करनी पड़ी कि हाँ , मुझे पता है कि मैं क्या कर रहा हूँ, और हाँ , मुझे इस बात की आवश्यकता है - क्योंकि तृतीय-पक्ष सेवा से ये चेक विफल हो रहे थे )
पिस्कॉर ने इमारत

4

कुछ मुद्दों:

  1. मुझे यकीन है कि कुछ एसएमटीपी सर्वर आपको तुरंत बताएंगे कि यदि आप जो पता देते हैं, वह मौजूद नहीं है, लेकिन कुछ एक गोपनीयता उपाय के रूप में नहीं होगा। वे बस आपको जो भी पते देंगे उन्हें स्वीकार करेंगे और चुपचाप उन लोगों की उपेक्षा करेंगे जो मौजूद नहीं हैं।
  2. जैसा कि लेख कहता है, यदि आप कुछ सर्वरों के साथ अक्सर ऐसा करते हैं, तो वे आपको ब्लैकलिस्ट कर देंगे।
  3. कुछ एसएमटीपी सर्वर (जैसे जीमेल) के लिए, आपको कुछ भी करने के लिए एसएसएल का उपयोग करने की आवश्यकता है। यह केवल ईमेल भेजने के लिए gmail के SMTP सर्वर का उपयोग करते समय सही है ।

तीसरे बिंदु के संबंध में, यह केवल तब होता है जब आप इसे रिले के रूप में उपयोग करना चाहते हैं। मुझे ऐसे किसी भी मेल एक्सचेंजर की जानकारी नहीं है जिसके लिए SSL की आवश्यकता होती है। यदि किसी ने ऐसा किया तो वे कई उपयोगकर्ताओं से ईमेल प्राप्त करना बंद कर देंगे।
kmkaplan

माफ कीजिएगा यह मेरी गलती है। यदि आप gmail के SMTP सर्वर का उपयोग करके ईमेल भेजना चाहते हैं , तो आपको SSL का उपयोग करना होगा।
ग्रीम पेरो

3

हालांकि यह सवाल थोड़ा पुराना है, यह सेवा टिप उपयोगकर्ताओं को भेजने से पहले वाक्यविन्यास सत्यापन से परे एक समान समाधान की जांच करने वाले ईमेल पते की खोज में मदद कर सकता है।

मैं इस ओपन सोर्स सेवा का उपयोग अधिक अच्छे प्रोजेक्ट्स के लिए कुछ प्रोजेक्ट्स के लिए ईमेल की गहराई से सत्यापन (ई-मेल एड्रेस डोमेन पर एमएक्स रिकॉर्ड की जांच) के लिए कर रहा हूं । यह सामान्य टाइपो चुड़ैल के लिए भी जाँच काफी उपयोगी है। यहां डेमो करें


आप दावा करते हैं कि यह सेवा ओपन-सोर्स है। क्या आप स्रोत का लिंक प्रदान कर सकते हैं?

मुझे माफ करना, मैं @amaurymartiny नहीं कर सकता। यदि मैं सही ढंग से याद करता हूं, तो मेलगुन परियोजना लिखने के समय खुला स्रोत था, लेकिन मैं थोथे समय के बाद स्रोत प्रदान करने वाले किसी भी रेपो का लिंक नहीं ढूंढ पा रहा हूं।
हेनकिलेग

2

"क्या आप बता सकते हैं कि कोई ईमेल ग्राहक / उपयोगकर्ता सही है या मौजूद है?"

दरअसल ये दो अलग चीजें हैं। यह मौजूद हो सकता है लेकिन सही नहीं हो सकता है।

कभी-कभी आपको उपयोगकर्ता के इनपुट को अंकित मूल्य पर लेना पड़ता है। सिस्टम को हराने के कई तरीके हैं अन्यथा।


2
+1 आप यह कभी सुनिश्चित नहीं कर सकते कि यह ईमेल भेजे बिना सही है और वास्तव में इसके लिए मानव प्रतिक्रिया मिल रही है, जैसे किसी लिंक पर क्लिक करना।
डैनियल डारनास

आप ईमेल बॉडी में एक लिंक (एक छवि आदि के लिए) रख सकते हैं और उस लिंक के लिए प्रत्येक लोड की गणना कर सकते हैं। क्लिकों की प्रतीक्षा करने की आवश्यकता नहीं है
जनक आर राजपक्ष

2

सभी के बारे में आप डीएनएस खोज सकते हैं और यह सुनिश्चित कर सकते हैं कि ईमेल पते में जो डोमेन है उसका एमएक्स रिकॉर्ड है, इसके अलावा इससे निपटने का कोई विश्वसनीय तरीका नहीं है।

कुछ सर्वर आरसीपीटी-टू विधि के साथ काम कर सकते हैं जहां आप एसएमटीपी सर्वर से बात करते हैं, लेकिन यह पूरी तरह से सर्वर के कॉन्फ़िगरेशन पर निर्भर करता है। एक अन्य समस्या हो सकती है कि एक अतिभारित सर्वर एक 550 कोड लौटा सकता है, कह सकता है कि उपयोगकर्ता अज्ञात है, लेकिन यह एक अस्थायी त्रुटि है, एक स्थायी त्रुटि है (451 मुझे लगता है?) जिसे वापस किया जा सकता है। यह पूरी तरह से सर्वर के कॉन्फ़िगरेशन पर निर्भर करता है।

मैं व्यक्तिगत रूप से DNS एमएक्स रिकॉर्ड के लिए जांच करूंगा, फिर एमएक्स रिकॉर्ड मौजूद होने पर एक ईमेल सत्यापन भेजें।


2
function EmailValidation($email)
{
    $email = htmlspecialchars(stripslashes(strip_tags($email))); //parse unnecessary characters to prevent exploits
    if (eregi('[a-z||0-9]@[a-z||0-9].[a-z]', $email)) {
        //checks to make sure the email address is in a valid format
        $domain = explode( "@", $email ); //get the domain name
        if (@fsockopen ($domain[1],80,$errno,$errstr,3)) {
            //if the connection can be established, the email address is probably valid
            echo "Domain Name is valid ";
            return true;
        } else {
            echo "Con not a email domian";
            return false; //if a connection cannot be established return false
        }
        return false; //if email address is an invalid format return false
    }
}

1
पोर्ट 80 का मतलब नहीं है
15

5
मुझे लगता है कि केवल ईमेल की जाँच करने के बजाय डोमेन नाम की जाँच करना मौजूद है।
द एंग्री सेक्सन

यह अधिक उपयोगी हो सकता है:getmxrr
25'18

1

यह मानते हुए कि यह उपयोगकर्ता का पता है, कुछ मेल सर्वर SMTP VRFY कमांड को वास्तव में इसके मेलबॉक्स के खिलाफ ईमेल पते को सत्यापित करने की अनुमति देते हैं। अधिकांश प्रमुख साइट आपको अधिक जानकारी नहीं देंगे; जीमेल प्रतिक्रिया है "यदि आप इसे मेल करने का प्रयास करते हैं, तो हम इसे वितरित करने का प्रयास करेंगे" या ऐसा ही कुछ चतुर।


1

मुझे लगता है कि आप ऐसा नहीं कर सकते, ऐसे कई परिदृश्य हैं जहाँ ई-मेल भेजना भी विफल हो सकता है। उदाहरण के लिए। उपयोगकर्ता पक्ष पर मेल सर्वर अस्थायी रूप से नीचे है, मेलबॉक्स मौजूद है लेकिन पूर्ण है इसलिए संदेश वितरित नहीं किया जा सकता है, आदि।

शायद इसीलिए उपयोगकर्ता द्वारा पुष्टि ई-मेल प्राप्त करने के बाद इतनी सारी साइटें एक पंजीकरण को मान्य करती हैं।


0

मैं यूसुफ और ड्रू के जवाब का उपयोग करने की पुष्टि कर सकता हूं RCTP TO: <address_to_check>। मैं उन उत्तरों में शीर्ष पर थोड़ा सा एडेंडा जोड़ना चाहूंगा।

कैच-सभी प्रदाताओं

कुछ मेल प्रदाता एक कैच-ऑल पॉलिसी को लागू करते हैं, जिसका अर्थ है कि *@mydomain.comसकारात्मक लौटेगाRCTP TO: कमांड । लेकिन इसका मतलब यह नहीं है कि मेलबॉक्स "मौजूद" है, जैसा कि "मानव का है"। यहां ज्यादा कुछ नहीं किया जा सकता है, बस जागरूक होना चाहिए।

आईपी ​​ग्रीलेस्टिंग / ब्लैकलिस्टिंग

Greylisting: अज्ञात आईपी से 1 कनेक्शन अवरुद्ध है। समाधान: कम से कम 2 बार पुन: प्रयास करें।

ब्लैकलिस्ट करना: यदि आप एक ही आईपी से बहुत अधिक अनुरोध भेजते हैं, तो यह आईपी अवरुद्ध है। समाधान: आईपी रोटेशन का उपयोग करें; रीज़र टो का उपयोग करता है।

HTTP साइन-अप फ़ॉर्म पर अनुरोध करता है

यह बहुत प्रदाता-विशिष्ट है, लेकिन आप कभी-कभी अच्छी तरह से तैयार किए गए HTTP अनुरोधों का उपयोग कर सकते हैं, और इन अनुरोधों की प्रतिक्रियाओं को पार्स कर सकते हैं यह देखने के लिए कि क्या इस प्रदाता के साथ पहले से ही साइन इन है या नहीं।

यहां एक ओपन-सोर्स लाइब्रेरी से प्रासंगिक फ़ंक्शन है जो मैंने *@yahoo.comHTTP अनुरोधों का उपयोग करके पते की जांच करने के लिए लिखा था : चेक-इफ-ईमेल-मौजूद । मुझे पता है कि मेरा कोड रस्ट है और इस धागे को PHP टैग किया गया है, लेकिन वही विचार लागू होते हैं।

फुल इनबॉक्स

यह एक किनारे का मामला हो सकता है, लेकिन जब उपयोगकर्ता के पास एक पूर्ण इनबॉक्स होता है, तो यह कहते हुए RCTP TO:एक 5.1.1 DSNत्रुटि संदेश लौटाएगा कि यह पूर्ण है। इसका मतलब यह है कि खाता वास्तव में मौजूद है!

प्रकटीकरण

मैं एक वास्तविक समय ईमेल सत्यापन API, Reacher चलाता हूं । मेरा कोड रस्ट में लिखा गया है, और 100% ओपन-सोर्स है। यदि आप अधिक मजबूत समाधान चाहते हैं, तो इसे देखें:

गिथब: https://github.com/amaurymartiny/check-if-email-exists

हुप्स के माध्यम से कूदने के लिए विभिन्न तकनीकों के संयोजन के साथ, मैं अपने ग्राहकों की जांच में लगभग 80% ईमेल को सत्यापित करने का प्रबंधन करता हूं।


-8
<?php

   $email = "someone@exa mple.com";

   if(!filter_var($email, FILTER_VALIDATE_EMAIL))
      echo "E-mail is not valid";
   else
      echo "E-mail is valid";

?>

उपयोगकर्ता एक .Net समाधान के लिए पूछ रहा है php नहीं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.