import javax.mail.*; import javax.mail.internet.*; import java.io.*; import java.util.*; public class HelloWorldPOPA { static int attachnum = 1; public static void main(String args[]) { try { String host="xxx.xxx.xxx.xxx"; // ホストアドレス String user="xxxxxx"; // アカウント String password="xxxxxx"; // パスワード // 接続します Session session = Session.getDefaultInstance(System.getProperties(), null); Store store = session.getStore("pop3"); store.connect(host, -1, user, password); // フォルダーを開きます Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); // フォルダーにあるメッセージの数を取得します int totalMessages = folder.getMessageCount(); if (totalMessages == 0) { System.out.println("メールは0件です"); folder.close(false); store.close(); return; } // メッセージを取得します Message[] messages = folder.getMessages(); for (int i = 0; i < messages.length; i++) { // メッセージを表示します dumpPart(messages[i]); } // フォルダーを閉じます folder.close(false); store.close(); } catch (Exception e) { e.printStackTrace(); } } public static void dumpPart(Part p) throws Exception { String html = ""; boolean attachment = false; if (p instanceof Message) { showMessage((Message)p); } if (p.isMimeType("text/plain")) { // テキストの場合 System.out.println("内容:\n" + p.getContent()); } else if (p.isMimeType("multipart/*")) { // マルチパートの場合 Multipart mp = (Multipart)p.getContent(); int count = mp.getCount(); for (int i = 0; i < count; i++) { dumpPart(mp.getBodyPart(i)); } } else if (p.isMimeType("message/rfc822")) { // メッセージの場合 dumpPart((Part)p.getContent()); } else if (p.isMimeType("text/html")) { // HTMLの場合 html = ".html"; attachment = true; } else { // その他の場合 attachment = true; } /** * 添付ファイルを保存します */ if (attachment) { String disp = p.getDisposition(); // 添付ファイルの場合 if (disp == null || disp.equalsIgnoreCase(Part.ATTACHMENT)) { String filename = p.getFileName(); if (filename!=null) { filename = MimeUtility.decodeText(filename); } else { filename = "添付ファイル" + attachnum++ + html; } try { File f = new File(filename); if (f.exists()) { throw new IOException("同名のファイルが存在します"); } OutputStream os = new BufferedOutputStream(new FileOutputStream(f)); InputStream is = p.getInputStream(); int c; while ((c = is.read()) != -1) { os.write(c); } os.close(); System.out.println(filename + "を保存しました。"); } catch (IOException e) { System.out.println("添付ファイルの保存に失敗しました。" + e); } } } } /** * メールの内容を表示します */ public static void showMessage(Message m) throws Exception { Address[] a; // 差出人 if ((a = m.getFrom())!=null) { for (int j = 0; j < a.length; j++) { System.out.println("差出人: " + MimeUtility.decodeText(a[j].toString())); } } // 宛先 if ((a = m.getRecipients(Message.RecipientType.TO))!=null) { for (int j = 0; j < a.length; j++) { System.out.println("宛先: " + MimeUtility.decodeText(a[j].toString())); } } // 題名 System.out.println("題名: " + m.getSubject()); // 日付 Date d = m.getSentDate(); System.out.println("日付: " + (d!= null ? d.toString() : "不明")); // サイズ System.out.println("サイズ: " + m.getSize()); } }