मैं ईमेल भेजने के बिना एसएमटीपी का उपयोग करके ईमेल पते की जांच करने के लिए इस PHP कोड पर आया हूं ।
किसी ने भी कुछ इसी तरह की कोशिश की है या यह आपके लिए काम करता है? क्या आप बता सकते हैं कि कोई ईमेल ग्राहक / उपयोगकर्ता सही है या मौजूद है?
मैं ईमेल भेजने के बिना एसएमटीपी का उपयोग करके ईमेल पते की जांच करने के लिए इस PHP कोड पर आया हूं ।
किसी ने भी कुछ इसी तरह की कोशिश की है या यह आपके लिए काम करता है? क्या आप बता सकते हैं कि कोई ईमेल ग्राहक / उपयोगकर्ता सही है या मौजूद है?
जवाबों:
दो तरीके हैं जो आप कभी-कभी यह निर्धारित करने के लिए उपयोग कर सकते हैं कि कोई प्राप्तकर्ता वास्तव में मौजूद है:
आप सर्वर से कनेक्ट कर सकते हैं, और एक VRFY
कमांड जारी कर सकते हैं । बहुत कम सर्वर इस कमांड का समर्थन करते हैं, लेकिन यह वास्तव में इसके लिए है। यदि सर्वर 2.0.0 DSN के साथ प्रतिक्रिया करता है, तो उपयोगकर्ता मौजूद है।
VRFY user
आप एक जारी कर सकते हैं RCPT
, और देख सकते हैं कि क्या मेल अस्वीकार कर दिया गया है।
MAIL FROM:<>
RCPT TO:<user@domain>
यदि उपयोगकर्ता मौजूद नहीं है, तो आपको 5.1.1 DSN मिलेगा। हालाँकि, सिर्फ इसलिए कि ईमेल अस्वीकार नहीं किया गया है, इसका मतलब यह नहीं है कि उपयोगकर्ता मौजूद है। कुछ सर्वर चुपचाप अपने उपयोगकर्ताओं की गणना को रोकने के लिए इस तरह के अनुरोधों को छोड़ देंगे। अन्य सर्वर उपयोगकर्ता को सत्यापित नहीं कर सकते हैं और संदेश की परवाह किए बिना स्वीकार करना होगा।
Greylisting नामक एक एंटीस्पैम तकनीक भी है, जो सर्वर को शुरू में पता अस्वीकार करने का कारण बनेगी, उम्मीद है कि वास्तविक SMTP सर्वर कुछ समय बाद पुनः वितरण का प्रयास करेगा। यह पते को मान्य करने के प्रयासों को गड़बड़ कर देगा।
ईमानदारी से, यदि आप एक पते को मान्य करने का प्रयास कर रहे हैं, तो सबसे अच्छा तरीका यह है कि स्पष्ट रूप से अमान्य पते को ब्लॉक करने के लिए एक साधारण रेगेक्स का उपयोग किया जाए, और फिर अपने सिस्टम से लिंक के साथ एक वास्तविक ईमेल भेजें जो ईमेल को मान्य करेगा। यह भी सुनिश्चित करता है कि वे उपयोगकर्ता अपने वास्तविक ईमेल में प्रवेश करते हैं, न कि एक मामूली टाइपो जो किसी और के साथ होता है।
यहां अन्य उत्तर ऐसा करने की कोशिश के साथ विभिन्न समस्याओं पर चर्चा करते हैं। मुझे लगा कि मैं यह दिखाऊंगा कि आप यह कैसे कर सकते हैं यदि आप इसे स्वयं करना चाहते हैं।
ईमेल पता मौजूद है या नहीं यह पूछने के लिए आप टेलनेट के माध्यम से एक मेल सर्वर से जुड़ सकते हैं। यहाँ के लिए एक ईमेल पते का परीक्षण करने का एक उदाहरण है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");
सामान्य उत्तर यह है कि यदि आप ईमेल भेजते हैं तो आप यह जांच नहीं कर सकते हैं कि क्या आप ईमेल भेजते हैं: यह सिर्फ एक ब्लैक होल में जा सकता है।
कहा जा रहा है कि वहाँ वर्णित विधि काफी प्रभावी है। यह जोनचेक में उत्पादन कोड में उपयोग किया जाता है सिवाय इसके कि यह क्वेट के बजाय RSET का उपयोग करता है।
जहाँ उपयोगकर्ता अपने मेलबॉक्स के साथ संपर्क में नहीं है, कई साइटें वास्तव में परीक्षण करती हैं कि मेल कहीं गुप्त नंबर भेजकर आती है जिसे एमिटर को वापस भेजा जाना चाहिए (या तो किसी गुप्त URL पर जाकर या ईमेल द्वारा इस गुप्त नंबर को वापस भेजकर)। अधिकांश मेलिंग सूचियाँ उसी तरह काम करती हैं।
वास्तव में नहीं ..... कुछ सर्वर "rcpt to:" की जांच नहीं कर सकते हैं
http://www.freesoft.org/CIE/RFC/1123/92.htm
ऐसा करना सुरक्षा जोखिम है .....
यदि सर्वर करते हैं, तो आप सर्वर पर हर पते की खोज करने के लिए एक बॉट लिख सकते हैं ...।
यह विफल होगा (अन्य मामलों के बीच) जब लक्ष्य मेलस्वर greylisting का उपयोग करता है।
Greylisting : SMTP सर्वर डिलीवरी से इनकार करता है पहली बार एक अज्ञात ग्राहक कनेक्ट होता है, अगली बार अनुमति देता है; यह कुछ प्रतिशत स्पैम्बोट्स को बाहर रखता है, जबकि वैध उपयोग की अनुमति देता है - क्योंकि यह उम्मीद है कि एक वैध मेल प्रेषक पुन: प्रयास करेगा , जो सामान्य मेल ट्रांसफर एजेंट करेगा।
हालांकि, यदि आपका कोड केवल एक बार सर्वर पर जांच करता है, तो ग्रीलेस्टिंग वाला सर्वर डिलीवरी से इनकार करेगा (जैसा कि आपका क्लाइंट पहली बार कनेक्ट कर रहा है); जब तक आप थोड़ी देर में फिर से जांच नहीं करते, तब तक आप गलत तरीके से वैध ई-मेल पते अस्वीकार कर सकते हैं।
कुछ मुद्दों:
हालांकि यह सवाल थोड़ा पुराना है, यह सेवा टिप उपयोगकर्ताओं को भेजने से पहले वाक्यविन्यास सत्यापन से परे एक समान समाधान की जांच करने वाले ईमेल पते की खोज में मदद कर सकता है।
मैं इस ओपन सोर्स सेवा का उपयोग अधिक अच्छे प्रोजेक्ट्स के लिए कुछ प्रोजेक्ट्स के लिए ईमेल की गहराई से सत्यापन (ई-मेल एड्रेस डोमेन पर एमएक्स रिकॉर्ड की जांच) के लिए कर रहा हूं । यह सामान्य टाइपो चुड़ैल के लिए भी जाँच काफी उपयोगी है। यहां डेमो करें ।
"क्या आप बता सकते हैं कि कोई ईमेल ग्राहक / उपयोगकर्ता सही है या मौजूद है?"
दरअसल ये दो अलग चीजें हैं। यह मौजूद हो सकता है लेकिन सही नहीं हो सकता है।
कभी-कभी आपको उपयोगकर्ता के इनपुट को अंकित मूल्य पर लेना पड़ता है। सिस्टम को हराने के कई तरीके हैं अन्यथा।
सभी के बारे में आप डीएनएस खोज सकते हैं और यह सुनिश्चित कर सकते हैं कि ईमेल पते में जो डोमेन है उसका एमएक्स रिकॉर्ड है, इसके अलावा इससे निपटने का कोई विश्वसनीय तरीका नहीं है।
कुछ सर्वर आरसीपीटी-टू विधि के साथ काम कर सकते हैं जहां आप एसएमटीपी सर्वर से बात करते हैं, लेकिन यह पूरी तरह से सर्वर के कॉन्फ़िगरेशन पर निर्भर करता है। एक अन्य समस्या हो सकती है कि एक अतिभारित सर्वर एक 550 कोड लौटा सकता है, कह सकता है कि उपयोगकर्ता अज्ञात है, लेकिन यह एक अस्थायी त्रुटि है, एक स्थायी त्रुटि है (451 मुझे लगता है?) जिसे वापस किया जा सकता है। यह पूरी तरह से सर्वर के कॉन्फ़िगरेशन पर निर्भर करता है।
मैं व्यक्तिगत रूप से DNS एमएक्स रिकॉर्ड के लिए जांच करूंगा, फिर एमएक्स रिकॉर्ड मौजूद होने पर एक ईमेल सत्यापन भेजें।
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
}
}
यह मानते हुए कि यह उपयोगकर्ता का पता है, कुछ मेल सर्वर SMTP VRFY कमांड को वास्तव में इसके मेलबॉक्स के खिलाफ ईमेल पते को सत्यापित करने की अनुमति देते हैं। अधिकांश प्रमुख साइट आपको अधिक जानकारी नहीं देंगे; जीमेल प्रतिक्रिया है "यदि आप इसे मेल करने का प्रयास करते हैं, तो हम इसे वितरित करने का प्रयास करेंगे" या ऐसा ही कुछ चतुर।
मुझे लगता है कि आप ऐसा नहीं कर सकते, ऐसे कई परिदृश्य हैं जहाँ ई-मेल भेजना भी विफल हो सकता है। उदाहरण के लिए। उपयोगकर्ता पक्ष पर मेल सर्वर अस्थायी रूप से नीचे है, मेलबॉक्स मौजूद है लेकिन पूर्ण है इसलिए संदेश वितरित नहीं किया जा सकता है, आदि।
शायद इसीलिए उपयोगकर्ता द्वारा पुष्टि ई-मेल प्राप्त करने के बाद इतनी सारी साइटें एक पंजीकरण को मान्य करती हैं।
मैं यूसुफ और ड्रू के जवाब का उपयोग करने की पुष्टि कर सकता हूं RCTP TO: <address_to_check>
। मैं उन उत्तरों में शीर्ष पर थोड़ा सा एडेंडा जोड़ना चाहूंगा।
कुछ मेल प्रदाता एक कैच-ऑल पॉलिसी को लागू करते हैं, जिसका अर्थ है कि *@mydomain.com
सकारात्मक लौटेगाRCTP TO:
कमांड । लेकिन इसका मतलब यह नहीं है कि मेलबॉक्स "मौजूद" है, जैसा कि "मानव का है"। यहां ज्यादा कुछ नहीं किया जा सकता है, बस जागरूक होना चाहिए।
Greylisting: अज्ञात आईपी से 1 कनेक्शन अवरुद्ध है। समाधान: कम से कम 2 बार पुन: प्रयास करें।
ब्लैकलिस्ट करना: यदि आप एक ही आईपी से बहुत अधिक अनुरोध भेजते हैं, तो यह आईपी अवरुद्ध है। समाधान: आईपी रोटेशन का उपयोग करें; रीज़र टो का उपयोग करता है।
यह बहुत प्रदाता-विशिष्ट है, लेकिन आप कभी-कभी अच्छी तरह से तैयार किए गए HTTP अनुरोधों का उपयोग कर सकते हैं, और इन अनुरोधों की प्रतिक्रियाओं को पार्स कर सकते हैं यह देखने के लिए कि क्या इस प्रदाता के साथ पहले से ही साइन इन है या नहीं।
यहां एक ओपन-सोर्स लाइब्रेरी से प्रासंगिक फ़ंक्शन है जो मैंने *@yahoo.com
HTTP अनुरोधों का उपयोग करके पते की जांच करने के लिए लिखा था : चेक-इफ-ईमेल-मौजूद । मुझे पता है कि मेरा कोड रस्ट है और इस धागे को PHP टैग किया गया है, लेकिन वही विचार लागू होते हैं।
यह एक किनारे का मामला हो सकता है, लेकिन जब उपयोगकर्ता के पास एक पूर्ण इनबॉक्स होता है, तो यह कहते हुए RCTP TO:
एक 5.1.1 DSN
त्रुटि संदेश लौटाएगा कि यह पूर्ण है। इसका मतलब यह है कि खाता वास्तव में मौजूद है!
मैं एक वास्तविक समय ईमेल सत्यापन API, Reacher चलाता हूं । मेरा कोड रस्ट में लिखा गया है, और 100% ओपन-सोर्स है। यदि आप अधिक मजबूत समाधान चाहते हैं, तो इसे देखें:
गिथब: https://github.com/amaurymartiny/check-if-email-exists
हुप्स के माध्यम से कूदने के लिए विभिन्न तकनीकों के संयोजन के साथ, मैं अपने ग्राहकों की जांच में लगभग 80% ईमेल को सत्यापित करने का प्रबंधन करता हूं।
<?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";
?>