1 package com.ozacc.mail.util;
3 import javax.mail.internet.AddressException;
4 import javax.mail.internet.InternetAddress;
5 import javax.naming.NamingEnumeration;
6 import javax.naming.NamingException;
7 import javax.naming.directory.Attributes;
8 import javax.naming.directory.DirContext;
9 import javax.naming.directory.InitialDirContext;
12 * DNS に MX レコードが登録されているかをチェックするクラス。
13 * Sun JDK 1.4 以上で使用できます。
15 * TODO: 未完成。正しく動作しません。
18 * @version $Id: MXCheck.java,v 1.1 2004/09/14 22:27:57 otsuka Exp $
19 * @author Tomohiro Otsuka
21 public class MXCheck {
23 public static boolean isValidEmailAddress(String email, String dns) {
25 new InternetAddress(email, true);
26 } catch (AddressException e) {
30 int pos = email.lastIndexOf("@");
31 String hostName = email.substring(pos + 1);
32 return hasMXRecord(hostName, dns);
36 * 指定された host に MX レコードが関連付けられているか
39 * @param hostName 検査するホスト名
40 * @param dns 検査に使用する DNS サーバ
41 * @return MX レコードが存在すれば true
43 public static boolean hasMXRecord(String hostName, String dns) {
44 String name = "dns://" + dns + "/" + hostName;
46 DirContext ictx = new InitialDirContext();
47 Attributes attrs = ictx.getAttributes(name, new String[] { "MX" });
48 NamingEnumeration namingEnumeration = attrs.getAll();
49 if (namingEnumeration.hasMore()) {
52 } catch (NamingException e) {
60 * 指定された host に MX レコードが関連付けられているかどうか判定します。
61 * 検査に使用する DNS サーバは localhost です。
63 * @param hostName 検査するホスト名
64 * @return MX レコードが存在すれば true
66 public static boolean hasMXRecord(String hostName) {
67 return hasMXRecord(hostName, "localhost");
71 * 次のコマンドで、ホスト名に MX レコードが存在するかどうか調べます。
73 * <code>java com.ozacc.mail.util.MXChecker [ホスト名] [使用するDNSサーバ]</code>
76 public static void main(String[] args) {
77 boolean result = false;
78 if (args.length == 1) {
79 result = hasMXRecord(args[0]);
81 result = hasMXRecord(args[0], args[1]);
85 System.out.println(args[0] + " の MX レコードは存在します。");
87 System.out.println(args[0] + " の MX レコードは登録されていません。");