2012-11-22 9 views
17

com.sun.mail.smtp.SMTPTransportを使用してJavaから電子メールを送信しています。メールアドレスの確認方法はありますか?

私はメールを送信することに成功しましたが、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 OKのid = 1TbWgN-0007oY-8R

私は問題を解決するために助けてください。 ありがとうございます。

+0

何を試しましたか?私は電子メールアドレスの有効/正しさをチェックするためにコード内に何も見ません。私は正規表現でそれを行うだろう。 – jlordo

+0

が有効であることを定義します:電子メールが実際のメールボックスに実際に対応するかどうか、または電子メールが有効な構文を持っているかどうかを確認することを意味しますか? – Peter

+0

@jlordo返信ありがとうございます。正規表現は、電子メールアドレスが有効な形式であるかどうかだけをチェックします。私は電子メールアドレスが存在するかどうかチェックしたい – Deepu

答えて

18

ありがとうございました。

MXレコードチェックで問題を解決できます。

この問題を解決するには、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

私はJava 6とOpenJDKを試してみましたが、問題なく動作しました。クラスはJavaのコアライブラリにあります。 – Deepu

+0

これはすべてのドメインで機能しますか?これは簡単な方法ですか? –

6

電子メールアドレスを確認する唯一の方法は、電子メールを電子メールで送信し、電子メール内の(独自の)リンクをWebサイトに戻すことです。

+2

+1を試してください。ただし、一時的なjunkmailアドレスを特定することは役に立ちません。 – jlordo

+0

@Quentinはお返事ありがとうございます。私は登録のためにそれをしたいので、私はJavaでそれをしたい。 – Deepu

+1

Deepu - @Quentinが教えようとしていることは、アプローチであり、言語(Java、C#など)とは関係がないと思います。たとえば、あなたが新しいアカウントを作成したときに、サイトが登録ページであなたが言及した電子メールを送信するとします。明らかに、メールボックスを開いてリンクをクリックすると、実際のユーザーであることを確認できます。同じアプローチQuentinは言及し、言語とは関係がありません。 – Steven

関連する問題