2012-11-22 14 views
17

Ich sende E-Mail über Java mit com.sun.mail.smtp.SMTPTransport.Wie kann ich überprüfen, ob die Mailadresse existiert oder nicht?

Ich bin erfolgreich, die E-Mail senden, aber SMTPTransport keinen Fehler zu geben, wenn ich die E-Mail an ungültige E-Mail-Adresse senden.

Gibt es eine Möglichkeit zu überprüfen, ob die angegebene Mailadresse existiert oder nicht?

Ich meine nicht die E-Mail-Adresse als Client-Seite zu überprüfen, muss ich als Serverseite überprüfen.

Ich habe viele Fragen in vielen Foren gefunden, aber ich bekomme keine richtigen Lösungen.

mein Code -

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()); 

Es gibt Ausgang für gültige und ungültige email_address: - 250 OK id = 1TbWgN-0007oY-8R

Bitte mir helfen, das Problem zu lösen. Vielen Dank im Voraus.

+0

Was hast du probiert? Ich sehe nichts in Ihrem Code, um die Gültigkeit/Richtigkeit einer E-Mail-Adresse zu überprüfen. Ich würde es mit einem regulären Ausdruck machen. – jlordo

+0

define valid: meinst du, ob eine E-Mail tatsächlich einem echten Postfach entspricht oder dass die E-Mail eine gültige Syntax hat? – Peter

+0

@jlordo danke für die Antwort. Regulärer Ausdruck überprüft nur, ob die E-Mail-Adresse im gültigen Format ist. Ich möchte überprüfen, ob die E-Mail-Adresse existiert oder nicht – Deepu

Antwort

18

Vielen Dank für Ihre Antworten.

Ich bin in der Lage, mein Problem durch MX Record Überprüfung zu lösen.

Ich habe dieses Link verwendet, um das Problem zu beheben. Möge dies auch für jemanden nützlich sein.

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 + "'"); 
} 

Vielen Dank.

+0

Danke für den Link! Ich habe dieses Beispiel von Ihrem Link verwendet, aber ich habe einen Fehler erhalten: Die Klasse javax.naming.directory.InitialDirContext konnte nicht gefunden werden. Hattest du dasselbe Problem? – XXX

+1

Ich versuchte in Java 6 und OpenJDK es funktionierte gut für mich, ich habe kein solches Problem. Die Klasse befindet sich in den Java-Core-Bibliotheken. – Deepu

+0

Funktioniert dies für alle Domänen? Ist das eine narrensichere Methode? –

6

Die einzige Möglichkeit, eine E-Mail-Adresse zu bestätigen, besteht darin, eine E-Mail an sie zu senden und den Benutzer auf einen (eindeutigen) Link in der E-Mail zurück zu Ihrer Website zu verweisen.

+2

+1, aber es wird nicht helfen, temporäre Junkmail-Adressen zu identifizieren. – jlordo

+0

@Quentin danke für die Antwort. Ich möchte es für die Registrierung tun, also möchte ich es in Java. – Deepu

+1

Deepu - Ich denke, was @Quentin versucht zu sagen ist der Ansatz und es hat nichts mit der Sprache zu tun (Java, C#, etc). Wenn Sie z. B. ein neues Konto erstellen, z. B. twittern, sendet die Website eine E-Mail, die Sie auf der Registrierungsseite angegeben haben. Offensichtlich öffnen Sie Ihre Mailbox und klicken auf den Link, um zu bestätigen, dass Sie ein echter Benutzer sind. Derselbe Ansatz, den Quentin erwähnt hat und nichts mit der Sprache zu tun hat. – Steven

Verwandte Themen