web-dev-qa-db-ja.com

メールアドレスの確認方法は?

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

有効なメールアドレスと無効なメールアドレスの両方の出力を提供します:-250 OK id = 1TbWgN-0007oY-8r

問題の解決を手伝ってください。前もって感謝します。

22
Deepu

ご回答ありがとうございます。

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

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

23
Deepu

メールアドレスを確認する唯一の方法は、メールを送信し、ユーザーにメール内の(一意の)リンクをたどってWebサイトに戻るよう要求することです。

8
Quentin