2012-11-22 14 views
17

मैं com.sun.mail.smtp.SMTPTransport का उपयोग कर जावा के माध्यम से ईमेल भेज रहा हूं।मेल पता कैसे जांचें या नहीं है?

मैं ईमेल भेजने में सफल हूं, लेकिन SMTPTransport यदि मैं अवैध ईमेल पते पर मेल भेजता हूं तो कोई त्रुटि नहीं दे रहा है।

क्या यह पता लगाने का कोई तरीका है कि दिया गया मेल पता मौजूद है या नहीं?

मैं ग्राहक के पक्ष के रूप में मेल की जांच करने का मतलब यह नहीं है, मैं सर्वर साइड के रूप में जांच करने के लिए की जरूरत है।

मुझे कई मंचों पर इस तरह के कई प्रश्न मिले लेकिन मुझे कोई उचित समाधान नहीं मिल रहा है।

मेरे कोड है -

String email = "[email protected]"; 

Properties props = new Properties(); 
props.put("mail.smtps.host", "mail.myDomain.com"); 
props.put("mail.smtps.auth", "true"); 
Session session = Session.getInstance(props, null); 

MimeMessage msg = new MimeMessage(session); 
msg.setFrom(new InternetAddress("Mail Demo <[email protected]>")); 
msg.setRecipients(Message.RecipientType.TO, email); 
msg.setSubject("Mail Example"); 
msg.setSentDate(new Date(System.currentTimeMillis())); 

String txt = "Message Body"; 

msg.setText(txt); 
SMTPTransport st = (SMTPTransport)session.getTransport("smtps"); 
st.connect("mail.myDomain.com","[email protected]","password"); 
st.sendMessage(msg, msg.getAllRecipients()); 

System.out.println("ServerResponse : " + st.getLastServerResponse()); 

यह दोनों वैध और अवैध EMAIL_ADDRESS का उत्पादन देता है: - 250 ठीक आईडी = 1TbWgN-0007oY-8R

कृपया मुझे इस समस्या को हल करने के लिए मदद करते हैं। अग्रिम धन्यवाद।

+0

आपने क्या प्रयास किया है? मुझे ईमेल पते की वैधता/शुद्धता की जांच करने के लिए आपके कोड में कुछ भी नहीं दिखाई देता है। मैं इसे नियमित अभिव्यक्ति के साथ करूँगा। – jlordo

+0

मान्य परिभाषित करें: क्या आपका मतलब यह है कि कोई ईमेल वास्तविक मेलबॉक्स से मेल खाता है या नहीं, या ईमेल के पास वैध वाक्यविन्यास है या नहीं? – Peter

+0

@jlordo उत्तर के लिए धन्यवाद। नियमित अभिव्यक्ति केवल जांचती है कि ईमेल पता मान्य प्रारूप में है। मैं यह जांचना चाहता हूं कि ईमेल पता मौजूद है या नहीं – Deepu

उत्तर

18

आपके सभी प्रतिक्रियाओं के लिए धन्यवाद।

मैं एमएक्स रिकॉर्ड जांच के माध्यम से अपनी समस्या को हल करने में सक्षम हूं।

मैंने समस्या को हल करने के लिए इस Link का उपयोग किया। यह किसी के लिए भी उपयोगी हो सकता है।

Hashtable env = new Hashtable(); 
env.put("java.naming.factory.initial", 
      "com.sun.jndi.dns.DnsContextFactory"); 
DirContext ictx = new InitialDirContext(env); 
Attributes attrs = ictx.getAttributes 
         (hostName, new String[] { "MX" }); 
Attribute attr = attrs.get("MX"); 
if ((attr == null) || (attr.size() == 0)) { 
    attrs = ictx.getAttributes(hostName, new String[] { "A" }); 
    attr = attrs.get("A"); 
    if(attr == null) 
     throw new NamingException 
        ("No match for name '" + hostName + "'"); 
} 

धन्यवाद।

+0

लिंक के लिए धन्यवाद! मैंने आपके लिंक से उस उदाहरण का उपयोग किया, लेकिन मुझे त्रुटि मिली: क्लास javax.naming.directory.InitialDirContext नहीं मिला। क्या आपको एक ही समस्या है? – XXX

+1

मैंने जावा 6 और ओपनजेडीके में कोशिश की, यह मेरे लिए ठीक काम करता था, मुझे ऐसी समस्या नहीं मिली। कक्षा जावा के कोर पुस्तकालयों में है। – Deepu

+0

क्या यह सभी डोमेन के लिए काम करता है? क्या यह मूर्खतापूर्ण तरीका है? –

6

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

+2

+1 को आजमाएं, लेकिन यह अस्थायी जंकमेल पते की पहचान करने में मदद नहीं करेगा। उत्तर के लिए – jlordo

+0

@Quentin धन्यवाद। मैं इसे पंजीकरण के लिए करना चाहता हूं, इसलिए मैं इसे जावा में चाहता हूं। – Deepu

+1

दीपू - मुझे लगता है कि @ क्वांटिन क्या बताने की कोशिश कर रहा है वह दृष्टिकोण है और इसका भाषा (जावा, सी #, आदि) से कोई लेना देना नहीं है। उदाहरण के लिए, जब आप एक नया खाता बनाते हैं, तो कहें, ट्विटर, साइट पंजीकरण पृष्ठ पर आपके द्वारा उल्लिखित एक ईमेल भेजती है। जाहिर है, आप अपना मेल बॉक्स खोलें और यह सत्यापित करने के लिए लिंक पर क्लिक करें कि आप असली उपयोगकर्ता हैं। वही दृष्टिकोण क्वांटिन ने उल्लेख किया और भाषा के साथ कुछ लेना देना नहीं है। – Steven

संबंधित मुद्दे