OSDN Git Service

389c7397c1f34cc3ab32a27b15a157ad65b20213
[spring-ext/ozacc-mail.git] / sandbox / src / com / ozacc / mail / util / MXCheck.java
1 package com.ozacc.mail.util;
2
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;
10
11 /**
12  * DNS に MX レコードが登録されているかをチェックするクラス。
13  * Sun JDK 1.4 以上で使用できます。
14  * <p>
15  * TODO: 未完成。正しく動作しません。
16  * 
17  * @since 1.1
18  * @version $Id: MXCheck.java,v 1.1 2004/09/14 22:27:57 otsuka Exp $
19  * @author Tomohiro Otsuka
20  */
21 public class MXCheck {
22
23         public static boolean isValidEmailAddress(String email, String dns) {
24                 try {
25                         new InternetAddress(email, true);
26                 } catch (AddressException e) {
27                         return false;
28                 }
29
30                 int pos = email.lastIndexOf("@");
31                 String hostName = email.substring(pos + 1);
32                 return hasMXRecord(hostName, dns);
33         }
34
35         /**
36          * 指定された host に MX レコードが関連付けられているか
37          * どうか判定します。
38          * 
39          * @param hostName 検査するホスト名
40          * @param dns 検査に使用する DNS サーバ
41          * @return MX レコードが存在すれば true
42          */
43         public static boolean hasMXRecord(String hostName, String dns) {
44                 String name = "dns://" + dns + "/" + hostName;
45                 try {
46                         DirContext ictx = new InitialDirContext();
47                         Attributes attrs = ictx.getAttributes(name, new String[] { "MX" });
48                         NamingEnumeration namingEnumeration = attrs.getAll();
49                         if (namingEnumeration.hasMore()) {
50                                 return true;
51                         }
52                 } catch (NamingException e) {
53                         return false;
54                 }
55
56                 return false;
57         }
58
59         /**
60          * 指定された host に MX レコードが関連付けられているかどうか判定します。
61          * 検査に使用する DNS サーバは localhost です。
62          * 
63          * @param hostName 検査するホスト名
64          * @return MX レコードが存在すれば true
65          */
66         public static boolean hasMXRecord(String hostName) {
67                 return hasMXRecord(hostName, "localhost");
68         }
69
70         /**
71          * 次のコマンドで、ホスト名に MX レコードが存在するかどうか調べます。
72          * <p>
73          * <code>java com.ozacc.mail.util.MXChecker [ホスト名] [使用するDNSサーバ]</code>
74          * 
75          */
76         public static void main(String[] args) {
77                 boolean result = false;
78                 if (args.length == 1) {
79                         result = hasMXRecord(args[0]);
80                 } else {
81                         result = hasMXRecord(args[0], args[1]);
82                 }
83
84                 if (result)
85                         System.out.println(args[0] + " の MX レコードは存在します。");
86                 else
87                         System.out.println(args[0] + " の MX レコードは登録されていません。");
88         }
89 }