ई-मेल एड्रेस सत्यापन को कितनी दूर ले जाना चाहिए?


101

मैं सोच रहा हूं कि लोगों को ई-मेल पते का सत्यापन कैसे करना चाहिए। मेरा क्षेत्र मुख्य रूप से वेब-विकास है, लेकिन यह कहीं भी लागू होता है।

मैंने कुछ दृष्टिकोण देखे हैं:

  • बस जाँच की जा रही है कि क्या कोई "@" मौजूद है, जो सरल है, लेकिन निश्चित रूप से वह विश्वसनीय नहीं है।
  • मानक ई-मेल प्रारूपों के लिए एक अधिक जटिल रेगेक्स परीक्षण
  • RFC 2822 के खिलाफ एक पूर्ण रीगेक्स - इसके साथ समस्या यह है कि अक्सर एक ई-मेल पता मान्य हो सकता है लेकिन यह संभवतः उपयोगकर्ता का मतलब नहीं है
  • डीएनएस सत्यापन
  • SMTP सत्यापन

जैसा कि बहुत से लोग जानते हैं (लेकिन बहुत से नहीं), ई-मेल पते में बहुत अधिक भिन्नताएं हो सकती हैं, जिन्हें ज्यादातर लोग आमतौर पर नहीं मानते (देखें RFC 2822 3.4.1 ), लेकिन आपको इन लक्ष्यों के बारे में सोचना होगा आपकी मान्यता: क्या आप बस यह सुनिश्चित करने की कोशिश कर रहे हैं कि एक ई-मेल संदेश एक पते पर भेजा जा सकता है, या यह कि उपयोगकर्ता को संभवतः डालने का क्या मतलब है (जो अन्यथा के वैध मामलों के अधिक अस्पष्ट मामलों में संभावना नहीं है) 'पते)।

एक विकल्प जो मैंने माना है वह बस अधिक गूढ़ पते के साथ एक चेतावनी दे रहा है, लेकिन फिर भी अनुरोध को गुजरने की अनुमति देता है, लेकिन यह एक रूप में अधिक जटिलता जोड़ता है और अधिकांश उपयोगकर्ताओं को भ्रमित होने की संभावना है।

हालांकि डीएनएस सत्यापन / एसएमटीपी सत्यापन नो-ब्रेनर्स की तरह प्रतीत होता है, मैं उन समस्याओं को दूर करता है जहां DNS सर्वर / एसएमटीपी सर्वर अस्थायी रूप से नीचे है और एक उपयोगकर्ता कहीं रजिस्टर करने में असमर्थ है, या उपयोगकर्ता का एसएमटीपी सर्वर आवश्यक सुविधाओं का समर्थन नहीं करता है।

कुछ अनुभवी डेवलपर्स इसे कैसे संभाल सकते हैं? क्या मैं सूचीबद्ध लोगों की तुलना में कोई अन्य दृष्टिकोण हैं?

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


व्यक्तिगत रूप से मैं डबल रेगेक्स वॉर्न और रिजेक्ट रणनीति के साथ जाऊंगा, जिसके बाद पते के स्वामित्व की पुष्टि करने के लिए एक ईमेल होगी।
जेम्स स्नेल

बड़ा सवाल यह है कि आप पते के लिए किस उद्देश्य से पूछ रहे हैं। उदाहरण के लिए, यदि आप उपयोगकर्ता को एक सत्यापन ईमेल भेजने जा रहे हैं, तो एक बहुत ही सरल जाँच पर्याप्त होनी चाहिए, क्योंकि संभवतः उपयोगकर्ता को एक वैध पता देने के लिए प्रेरित किया जाता है।
एसडीसोलर

जवाबों:


80

उपयोगकर्ता को ईमेल भेजने और अधिकांश मंचों की तरह प्रतिक्रिया की प्रतीक्षा करने के अलावा एक वैध ईमेल पते की पुष्टि करने का कोई 100% विश्वसनीय तरीका नहीं है।

मैं सरल "@" सत्यापन नियम के साथ जाऊंगा और फिर उपयोगकर्ता को उनके ईमेल पते की पुष्टि करने के लिए ईमेल करूंगा।

हालांकि, यह मेरी निजी राय है ... मैं अन्य सुझावों का इंतजार कर रहा हूं।


6
पूर्णतया सहमत। या तो आप वास्तव में उस पते की परवाह करते हैं, या आप नहीं करते हैं। मुझे अर्ध-देखभाल के लिए कोई औचित्य नहीं दिखता।
बेंजोल

3
अब तक का सबसे अच्छा जवाब। मान्य करें @ तो यह सत्यापित पते (एक ईमेल के साथ) - सूक्ष्म अंतर नहीं।
billy.bob

... यही कारण है कि ज्यादातर फोरम क्या करते हैं।
डैन रे

मैं @ बिली बॉब से सहमत हूं, कि सत्यापन ईमेल के बाद एक साधारण सत्यापन ईमेल को सही साबित करने का सबसे प्रभावी तरीका है।
एसडीसोलर

एक "मान्य" ईमेल पता भी गलत व्यक्ति के पास जा सकता है इसलिए सत्यापन ईमेल वास्तव में सुनिश्चित करने का एकमात्र तरीका है। मैं हर साल उन लोगों में से कुछ मिलता है जब कोई मेरा अपना ईमेल पता गलत करता है।
एक्सल

57

एक सुझाव: उन में + के साथ पतों को अस्वीकार न करें। उन्हें नाराज़ करना आम बात है, लेकिन यह एक वैध चरित्र है, और gmail उपयोगकर्ता पता +label@gmail.com का उपयोग कर सकते हैं और आने वाले मेल को आसानी से लेबल और सॉर्ट कर सकते हैं।


8
+1 !!! सभी साइटों के फेसबुक से ईमेल को फ़िल्टर करना असंभव लगता है!
जेनीलेन

इसके बिना फ़िल्टर कर सकते हैं - सिर्फ प्रेषक जानकारी
Casebash

1
GMail ने इसे अन्य मेल सर्वर से उठाया। मेरा मानना ​​है कि क्यूमेल और पोस्टफिक्स ने इसे लोकप्रिय बनाया।

23
हालांकि मैं भावुकता से सहमत हूं, लेकिन इस सवाल का जवाब देना भी शुरू नहीं करता है।
ब्रायन ओकले

29

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

एकमात्र तरीका आपको कभी भी यकीन होगा कि एक पता वैध है और उसके मालिक द्वारा प्रस्तुत किया गया है जो वास्तव में यह चाहता है कि यह आपके आवेदन के लिए उपयोग किया जाता है एक सत्यापन ईमेल भेजना है। खैर, जब तक यह स्पैम फ़िल्टर नहीं करता है मुझे लगता है =)।


25

ईमेल सत्यापन के लिए रेगेक्स का उपयोग करने की एक और कमजोरी यह है कि सभी अमान्य शीर्ष-स्तरीय डोमेन को पकड़ना लगभग असंभव है, जबकि सभी अमान्य हैं।

उदाहरण के लिए, जेफ एटवुड के जवाब में बेसिक ईमेल रेगेक्स:

\ B [एक-Z0-9 ._% + -]। + @ [एक-Z0-9 .-] [AZ] {2,4} \ ख

दो से चार वर्णों के किसी भी TLD को स्वीकार करेगा। इसलिए, उदाहरण के लिए .spam को स्वीकार कर लिया जाएगा, लेकिन .Museum और .travel (दोनों वैध TLD) को अस्वीकार कर दिया जाएगा।

बस एक और कारण है कि यह सिर्फ @ के लिए देखना बेहतर है, और एक पुष्टिकरण ईमेल भेजें।


24

अंतर्राष्ट्रीय डोमेन नामों के साथ लगभग सब कुछ संभव है:

  • Håkan.Söderström@malmö.se
  • punnycode@XN--0ZWM56D.XN--HGBK6AJ7F53BBA
  • 试 @ 例子। 测试 .مثال.آزمایشی

यदि आप कोई भी परीक्षण करना चाहते हैं, तो आपको इसे पहले पंचकोश में बदलना चाहिए।

बिना सब कुछ किए आपको यह परखना चाहिए कि वहाँ:

  • कम से कम एक @ है
  • स्थानीय भाग में कम से कम एक वर्ण है
  • डोमेन भाग में कम से कम एक डॉट है
  • डोमेन में कम से कम चार अक्षर हैं (यह मानते हुए कि किसी का tld में कोई पता नहीं है, कि tld कम से कम 2% है)
function isEmail(address) {
    var pos = address.lastIndexOf("@");
    return pos > 0 && (address.lastIndexOf(".") > pos) && (address.length - pos > 4);
}

1
यदि आप जावास्क्रिप्ट का उपयोग पंचकोश में बदलने के लिए करना चाहते हैं तो आप निम्नलिखित उत्तर में कोड का उपयोग कर सकते हैं: stackoverflow.com/questions/183485/…

यह सच है - फिर यह सुनिश्चित करना @ संकेत ईमेल पते की तरह "लग रहा है" होने का एकमात्र तरीका हो सकता है।
एसडीसोलर

19

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


यह एक बेहतरीन उपाय है। यहाँ एक @ @ के लिए एक डॉट देखने के लिए एक regexp है:/.+@.+\..+/
इवान मोरन

11

एक खुले स्रोत सत्यापनकर्ता का उपयोग करें जो गलत नकारात्मक नहीं देता है। आपके लिए शून्य प्रयास और आपके ऐप के लिए मजबूत सत्यापन।

मैंने अब कैल हेंडरसन, डेव चाइल्ड, फिल हैक, डग लवेल और आरएफसी 3696 से परीक्षण मामलों को समेटा है। सभी में 158 परीक्षण पते।

मैंने इन सभी परीक्षणों को उन सभी सत्यापनकर्ताओं के खिलाफ चलाया, जिन्हें मैं पा सकता था। तुलना यहाँ है: http://www.dominicsayers.com/isemail

मैं इस पृष्ठ को अप-टू-डेट रखने की कोशिश करूंगा क्योंकि लोग अपने सत्यापनकर्ताओं को बढ़ाते हैं। इन परीक्षणों और मेरे अपने सत्यापनकर्ता की रचनात्मक आलोचना के संकलन में उनकी मदद और सहयोग के लिए कैल, डेव और फिल का धन्यवाद ।

लोगों को विशेष रूप से RFC 3696 के खिलाफ इरेटा के बारे में पता होना चाहिए । विहित उदाहरणों में से तीन वास्तव में अमान्य पते हैं। और एक पते की अधिकतम लंबाई 254 या 256 वर्ण है, 320 नहीं


तुलना करने के लिए लिंक नीचे है :(
Zero3

10

जवाबों पर विचार करने के बाद से (क्योंकि मैं पूरी तरह से ई-मेल की पुष्टि के बारे में भूल गया था) यह मुझे लगता है कि कम-घर्षण समाधान के लिए एक उपयुक्त समझौता होगा:

  1. ई-मेल पता मान्य लग रहा है, और यह अधिक अस्पष्ट है, लेकिन एकमुश्त अस्वीकार करने से बचने के लिए चेतावनी देने के लिए regex का उपयोग करें।
  2. यह सुनिश्चित करने के लिए SMTP सत्यापन का उपयोग करें कि ई-मेल पता मान्य है।
  3. यदि SMTP सत्यापन तब विफल रहता है - और उसके बाद ही - अंतिम उपाय के रूप में एक पुष्टिकरण ई-मेल का उपयोग करें। ई-मेल की पुष्टि के लिए आपके आवेदन के बाहर बहुत अधिक इंटरैक्शन की आवश्यकता होती है, क्योंकि उन्हें कम घर्षण माना जाता है, लेकिन वे एक आदर्श कमबैक हैं।

1
आप इस बात की जाँच कैसे कर सकते हैं कि कोई उपयोगकर्ता पुष्टिकरण भेजे बिना ईमेल पते का मालिक है? उदाहरण के लिए, वे कहते हैं कि उन्होंने आपके ईमेल पते में टाइप किया है। क्या आप इस बात से नाराज़ नहीं होंगे कि डेवलपर ने एक पुष्टिकरण ईमेल प्रदान नहीं करने का फैसला किया है और इसलिए किसी को भी, जो आपका पता जानता है, आपको अपनी साइट पर साइन अप करने की अनुमति देता है?
रूपर्ट मैडेन-एबट

1
SMTP सत्यापन? सर्वर से पूछें कि क्या पता मौजूद है? स्पैम से बहुत समय पहले छुटकारा मिल गया था।

6

RegexBuddy अपने पुस्तकालय से निम्नलिखित ईमेल-संबंधित नियमित अभिव्यक्ति प्रदान करता है:

ईमेल पता (मूल)

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

ईमेल पता (RFC 2822, सरलीकृत)

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

लेकिन मैं पीटर और सुपरजाय की प्रतिक्रियाओं से सहमत हूं; एकमात्र वास्तविक "परीक्षण" वास्तव में एक सत्यापन ईमेल भेज रहा है।


1
आपका मूल ईमेल चेक जैसी चीजों के खिलाफ विफल रहता है bob@mydivision.mycompany.com। आपको यह भी कहना चाहिए कि केस-असंवेदनशील मैच की आवश्यकता है क्योंकि आप केवल ऊपरी मामले ASCII का उपयोग कर रहे हैं।
अपराह्न

अपरकेस वर्णों को अस्वीकार क्यों करें (दूसरे रेगेक्स के साथ)? MTA प्राप्त करने के लिए स्थानीय-भाग का सत्यापन नहीं होना चाहिए? सफेद रिक्त स्थान और उद्धरण के अपवाद के साथ।
डिर्क जाकेल

@dirk मार्क के रूप में, आप इसे चलाते समय इस regex में "संवेदनशील मामला नहीं" ध्वज लागू करेंगे।
जेफ एटवुड

मूल एक अच्छा नहीं है क्योंकि कई TLD> 4 वर्ण हैं। मैं अभी इसे 2 मिनट, कोई अधिकतम{2,}
EkriirkE

4

मैंने 4 अलग-अलग कंपनियों में काम किया है, जहाँ पर ओ'पाली या ओ'ब्रायन या किसी अन्य ई-मेल पते पर एपोस्ट्रोफी के साथ मदद डेस्क पर कोई व्यक्ति चिल्लाया। जैसा कि पहले सुझाव दिया गया था, सभी रेगेक्स सब कुछ नहीं पकड़ेंगे, लेकिन खुद को कुछ परेशानी से बचाएंगे और चेतावनी उत्पन्न किए बिना एक एपोस्ट्रोफी को स्वीकार करेंगे।

-
बंब


उसे स्वीकार करें। उसी तरह हैश साइन (#) के लिए जाता है।
तोमलक

2
सिर्फ इसलिए कि लोगों के नामों में हैश अंक नहीं होते हैं इसका मतलब यह नहीं है कि वे ईमेल पते में मान्य नहीं हैं।
डेव शेरोहमान

3

यदि मेलबॉक्स मौजूद है तो आप वास्तव में परीक्षण करने के लिए अभी भी ईमेल सत्यापन ले सकते हैं। इस तकनीक की कमियां हैं (विकास का समय और दुरुपयोग के लिए ब्लैकलिस्ट होने की संभावना भी)। http://www.webdigi.co.uk/blog/2009/how-to-check-if-an-email-address-exists-without-sending-an-email/


3

यदि आप एक ई-मेल को सत्यापित करना चाहते हैं (यानी सुनिश्चित करें, कि उपयोगकर्ता ई-मेल पते का मालिक है), एक पुष्टिकरण ई-मेल केवल एक चीज है जो आप कर सकते हैं। फिर से कई लोगों ने स्पैम-पते समर्पित किए हैं या OneWayMail जैसी सेवाओं का उपयोग करते हैं और यदि वे आपको अपना वास्तविक ई-मेल पता नहीं देना चाहते हैं, तो वे नहीं करेंगे। तो मूल रूप से आप उपयोगकर्ता अवरोध पैदा कर रहे हैं।

जब सत्यापन की बात आती है , तो यह सुनिश्चित करने के लिए, कि उपयोगकर्ता अनजाने में गलत ई-मेल पते को इनपुट नहीं करता है, यह निश्चित रूप से सही प्रेरणा है। हालांकि, कम से कम HTML रूपों के लिए (जो ई-मेल पते इकट्ठा करने का सबसे आम तरीका है), यह शायद ही सही साधन है।

एक के लिए, आप ईमेल पते के वास्तविक "शब्दों" में टाइपो को पहचान नहीं पाएंगे। आपके पास यह पता लगाने का कोई तरीका नहीं है कि back2dso@example.comयह गलत है, केवल प्रारूप पर आधारित है।
लेकिन अधिक महत्वपूर्ण बात, उपयोगकर्ता के दृष्टिकोण से, आपके द्वारा दर्ज किए जाने वाले ईमेल पतों में से केवल एक (या एक हाथ भरा हुआ) हो सकता है। और आप शायद इसे पहले ही दर्ज कर चुके हैं।
इसलिए किसी पते को मान्य करने की कोशिश करने के बजाय, आपको यह सुनिश्चित करने पर ध्यान केंद्रित करना चाहिए कि सभी ब्राउज़र ईमेल फ़ील्ड को पहचानते हैं और इस तरह पहले ईमेल पते में टाइप करने की आवश्यकता को समाप्त करते हैं। बेशक, यह लागू नहीं होता है, यदि आप उस तरह की साइट का निर्माण कर रहे हैं जो उन उपयोगकर्ताओं द्वारा हिट होने की संभावना है जो पहले कभी अपने ब्राउज़र में अपना ई-मेल पता दर्ज नहीं करते हैं। लेकिन मुझे लगता है कि हम में से सबसे कम लोग ऐसी स्थिति में हैं।


2

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


2

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


2

ईमेल सत्यापन के लिए मेरे द्वारा अब तक का सबसे पूर्ण और सटीक रेगेक्स जो यहां प्रलेखित है । यह ह्दय के मंद होने के लिए नहीं है; यह पर्याप्त जटिल है कि यह मनुष्यों के लिए पार्स करना आसान बना देता है (नमूना कोड जावा में है)। लेकिन ऐसे मामलों में जहां सत्यापन के साथ सभी तरह से विलय किया जाता है, मुझे नहीं लगता कि यह बहुत बेहतर है।

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


2

आप जो भी चुनते हैं, मुझे लगता है कि आपको यह मानने की आवश्यकता है कि 99% समय के लिए, उपयोगकर्ता को वास्तव में पता है कि उनका ईमेल क्या है। ऑस्ट्रेलिया के किसी व्यक्ति के रूप में, मुझे अभी भी कभी-कभी एक ओह-सो-चतुर ईमेल सत्यापन मिलता है जो मुझे बताता है कि मेरे पास संभवतः .com.au डोमेन नहीं है। यह आपके मन के इंटरनेट के शुरुआती दिनों में बहुत अधिक हुआ करता था।

इन दिनों एक पुष्टिकरण ईमेल भेजना उपयोगकर्ताओं के लिए स्वीकार्य है, और ऑप्ट-इन के साथ-साथ उनके आपूर्ति किए गए पते को मान्य करने के मामले में भी उपयोगी है।


2

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

मैंने जो सामान्य मामले देखे हैं:

  • डोमेन नाम, या कई अन्य सरल टाइपो वेरिएंट के बीच में एक पत्र को छोड़ना।
  • TLD भ्रम (उदाहरण के लिए, .brएक .comडोमेन में जोड़ना , या .brकिसी .com.brडोमेन से ड्रॉप करना )।
  • www.एक ईमेल पते के स्थानीय भाग की शुरुआत में जोड़ना (मैं इसे नहीं बना रहा हूं; मैंने फॉर्म के कई ईमेल पते देखे www.username@example.com)।

और भी विचित्र मामले थे; स्थानीय डोमेन के रूप में एक संपूर्ण डोमेन नाम जैसी चीजें , दो @(कुछ जैसे username@domain.tld@example.com) के साथ पते , और इसी तरह।

बेशक, उनमें से ज्यादातर अभी भी RFC-822 पते मान्य थे, इसलिए तकनीकी रूप से आप एमटीए को उनके साथ सौदा कर सकते हैं। हालांकि, उपयोगकर्ता को चेतावनी देते हुए कि ईमेल पता दर्ज किया गया है, संभवत: फर्जी है, मददगार हो सकता है, खासकर अगर आपके लक्षित दर्शक बहुत कंप्यूटर साक्षर नहीं हैं।


उन साइटों के साथ समस्या की तरह लगता है कि उपयोगकर्ताओं को उन सूचनाओं को दर्ज करने के लिए मजबूर किया गया था जिन्हें वे वास्तव में नहीं समझते थे। सभी साइटों को अपने उपयोगकर्ताओं के साथ ई-मेल संपर्क की आवश्यकता नहीं होती है, भले ही यह साइट के लिए चीजों को आसान बना दे।
bzlm

2

दुनिया में सभी regex सत्यापन किसी को गलत या नकली ईमेल पता दर्ज करने से नहीं रोकेंगे। यह वास्तव में कष्टप्रद है।


क्या आपने कभी ईमेल सत्यापन उपकरण की कोशिश की है ? मैं इस सेवा पर एक नज़र डालने का सुझाव देता हूं।
इमान हज्जाज़ी

2

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

[सभी वर्ण, कोई स्थान नहीं] @ [अक्षर और संख्या] ([[अक्षर और संख्या]) जहां अंतिम समूह कम से कम एक बार दिखाई देता है।

इसके लिए RegEx कुछ इस तरह दिखाई देगा:

[\S]+@[\w]+(.[\w-]+)+

और फिर सुनिश्चित करने के लिए एक पुष्टिकरण ईमेल भेजें।


2
एक टाइपो है (जब तक कि आप केवल "डब्ल्यू" को टीएलडी के रूप में अनुमति नहीं देना चाहते) और यह एक हाइफ़न (-) के साथ डोमेन से मेल नहीं खाता है। यह बेहतर काम करता है: [\ S] + @ [\ w -] + (। [\ W -] +) +

1

@ याकोव (जवाब देने के लिए किसी तरह का जवाब दे सकते हैं)

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

मैं सहमत हूं, लेकिन मुझे यकीन नहीं है कि यह इसके लायक है। हमारे पास उस उद्देश्य के लिए पुष्टि फ़ील्ड भी हैं (आपके ई-मेल पते को फिर से दोहराते हुए)। एक अन्य स्थिति जहां साइट का प्रकार अलग-अलग तरीकों से वारंट कर सकता है।

इसके अतिरिक्त, एक पुष्टिकरण ई-मेल भेजने से मूल उपयोगकर्ता को कोई संकेत नहीं मिलता है कि उन्होंने जो पता दर्ज किया था वह गलत था। पुष्टिकरण ई-मेल प्राप्त नहीं करने के बाद वे मान सकते हैं कि आपका ऐप / साइट दोषपूर्ण है; कम से कम उपयोगकर्ता को अपने खाते का उपयोग शुरू करने की अनुमति देकर वे अपने ई-मेल पते को सही कर सकते हैं, खासकर यदि यह एक उपयुक्त स्पष्ट स्थान पर प्रदर्शित किया गया हो।


1

मैदान के लिए घोड़े।

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

यदि आप एक बैंक के लिए एक वेबसाइट विकसित कर रहे हैं, तो आप इन सभी के शीर्ष पर घोंघा मेल या फोन सत्यापन चाहते हैं।

यदि आप एक प्रतियोगिता के लिए एक वेबसाइट विकसित कर रहे हैं, तो आप उनमें से किसी को भी नहीं चाहते हैं - पोस्ट प्रोसेसिंग में ईमेल सत्यापित करें और यदि कोई विफल रहता है तो यह उस व्यक्ति के लिए बहुत बुरा है जो इसे दर्ज किया है - आप सर्वर प्रदर्शन को लोगों का एक बड़ा क्रश मान सकते हैं ( उदाहरण के लिए) टीवी प्रतियोगिता, यह सुनिश्चित करने पर कि सभी को सही ढंग से इनलाइन मान्य किया गया है।

ईमेल सत्यापन को कितनी दूर ले जाना चाहिए?

जहाँ तक आवश्यक हो और वारंट हो।

और आगे नहीं (चुंबन)


1

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


ई-मेल की पुष्टि "किस तरह से" के आसपास होती है? Mailinator और MyTrashMail दोनों एक ही पते पर बाद के मेल स्वीकार करेंगे। यदि उपयोगकर्ता उन्हें जांचने की जहमत नहीं उठाता है, तो यह एक और कहानी है।
bzlm

1

आप अपने ईमेल सत्यापन में क्या पकड़ने की कोशिश कर रहे हैं?

ईमेल पतों की रेगेक्स मान्यता, सर्वोत्तम रूप से, यह सत्यापित कर सकती है कि पता वाक्यगत रूप से सही है और अपेक्षाकृत प्रशंसनीय है। यदि रिजेक्स काफी सही नहीं है, तो संभवत: वास्तविक, सुपुर्द करने योग्य पतों को अस्वीकार करने का भी इसका खतरा है (जैसा कि पहले ही कई बार बताया गया है)।

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

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


1

एचटीएमएल 5 के आने से कम से कम एक नया दृष्टिकोण संभावनाओं में जुड़ जाता है: टाइप ' ईमेल ' के इनपुट का उपयोग जो क्लाइंट पक्ष पर सत्यापन की अनुमति देता है । फ़ायरफ़ॉक्स, क्रोम, सफारी और ओपेरा के वर्तमान संस्करण इसका समर्थन करते हैं (और अन्य ब्राउज़र बस इसे टाइप = पाठ की तरह मानते हैं, इसलिए इसका उपयोग बिना किसी समस्या के किया जा सकता है, फिर आपके पास निश्चित रूप से सत्यापन नहीं है।)

यह कभी नहीं (जैसा कि कुछ बार बताया गया है) एक व्यावहारिक पते की गारंटी देता है, लेकिन यह उन जगहों पर बहुत फायदेमंद हो सकता है (और अंततः सर्वर साइड चेक की जगह) जहां आपको संभावित उपयोगकर्ता त्रुटियों को पकड़ने की आवश्यकता होती है।


<input type="email">HTMLElement के लिए फ़ायरफ़ॉक्स कार्यान्वयन : dxr.mozilla.org/mozilla-central/source/dom/html/…
tiffon

0

ईमेल सत्यापन के तीन मुख्य स्तर:

1) एक उचित स्वरूपित ईमेल पते के लिए नियमित अभिव्यक्ति की जाँच करें email@email.com

2) ईमेल डोमेन एमएक्स रिकॉर्ड के खिलाफ जांच करता है कि डोमेन नाम में ईमेल सेवा है या नहीं

3) एक पुष्टिकरण लिंक या कोड के साथ एक पुष्टिकरण ईमेल भेजना

स्तर 1:

विजुअल स्टूडियो में, आप "रेगुलर एक्सप्रेशन वैलिडेटर" का उपयोग कर सकते हैं। और "ValidationExpression" संपत्ति में आप "..." बटन पर क्लिक कर सकते हैं जिसमें ईमेल पतों के लिए नियमित अभिव्यक्ति प्रारूप में जोड़ने के लिए एक विज़ार्ड है।

लेवल 2:

ईमेल डोमेन के पास वैध MX रिकॉर्ड है या नहीं, यह सत्यापित करने के लिए nslookup का उपयोग करने के लिए नीचे मेरा C # कोड दिया गया है। विन 2008 R2 और विन 7 पर त्वरित और ठीक चलता है।

using System.Net.Mail;
using System.Diagnostics;

public static bool checkMXRecords(string email) 
    {
        MailAddress addr = new MailAddress(email);
        string domain = addr.Host;

        string command = "nslookup -querytype=mx " + domain;
        ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command);

        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.UseShellExecute = false;

        procStartInfo.CreateNoWindow = true;

        Process proc = new Process();
        proc.StartInfo = procStartInfo;
        proc.Start();
        string result = proc.StandardOutput.ReadToEnd();

        if (result.ToLower().Contains("mail exchanger"))
        {
            return true;
        }
        else return false;

     } // checkMXRecords

एक अन्य विकल्प Arsofttools नगेट पैकेज का उपयोग करना है, लेकिन यह विंडोज सर्वर 2008 R2 पर धीमा हो सकता है जैसा कि मैंने अनुभव किया है लेकिन विन 7 पर त्वरित चलता है।

स्तर 3:

ईमेल की पुष्टि के लिए, आप या तो ईमेल विशिष्ट हेक्स यूआरएल (एन्क्रिप्शन कार्यों का उपयोग करके) आदि http://domain.com/validateEmail?code=abcd1234 उत्पन्न कर सकते हैं जब उपयोगकर्ता उस पर क्लिक करता है। इस url को मेमोरी में स्टोर करने की कोई आवश्यकता नहीं है।

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