javamail は こちら(Oracle)からダウンロードします ダウンロードして解凍すると、サンプルが demo ディレクトリにあります。 その中の copier.java に日本語でコメントを入れてもう少し解りやすく 改造したものです。 サンプルは、URLName で接続していましたが、ユーザ間のコピーのほうが 解りやすいので変更しています。
import java.util.*; import java.io.*; import javax.mail.*; import javax.mail.event.*; import javax.activation.*; import com.sun.mail.imap.*; public class Main { private MyTool out = new MyTool(">>>"); // ***************************************************** // エントリポイント // ***************************************************** public static void main(String[] args) { Main thisClass = new Main(); } // ***************************************************** // コンストラクタ // ***************************************************** public Main() { super(); my_acton(); } // ***************************************************** // 初期処理 // ***************************************************** private void my_acton() { out.println("処理開始"); try { Properties props = System.getProperties(); // セッションオブジェクトの取得 Session session = Session.getInstance(props, null); // session.setDebug(true); // Store オブジェクトの取得 Store store = session.getStore("imap"); // 接続 store.connect("サーバー", "ユーザ", "パスワード"); // 現在のユーザのフォルダオブジェクトを取得 Folder[] folders = store.getPersonalNamespaces(); for (int index = 0; index < folders.length; index++) { // さくらインターネットでは、INBOX 一つ out.println(folders[index].getFullName()); } // フォルダの存在チェック Folder folder = folders[0]; // INBOX if (folder == null || !folder.exists()) { out.println("Invalid folder"); System.exit(1); } // URL の内容を表示 out.println( folder.getURLName().toString() ); // フォルダを開く folder.open(Folder.READ_WRITE); int m_cnt = folder.getMessageCount(); if (m_cnt == 0) { out.println("メッセージが存在しません"); folder.close(false); // true では、メッセージは全て削除 store.close(); System.exit(0); } out.println("メッセージ件数 : " + m_cnt); Store store2 = session.getStore("imap"); // 別ユーザに接続 store2.connect("サーバー", "別のユーザ", "別のユーザのパスワード"); // 別ユーザのフォルダオブジェクト Folder[] folders_2 = store2.getPersonalNamespaces(); Folder dfolder = folders_2[0]; if (!dfolder.exists()) { out.println("出力先フォルダが存在しません"); folder.close(false); store.close(); System.exit(0); } // コピーするメッセージの範囲を作成 // Message[] msgs = folder.getMessages(2, 4); // 範囲指定 Message[] msgs = folder.getMessages(); // 全てのメッセージ // メッセージのコピー folder.copyMessages(msgs, dfolder); folder.close(false); store.close(); } catch (Exception ex) { ex.printStackTrace(); } out.println("処理終了"); } // ***************************************************** // 内部用クラス // ***************************************************** private class MyTool { private String mark = null; MyTool(String pm) { mark = pm; } public void println(String str) { System.out.println( this.mark + str ); } } }
メッセージの取得には、単一メッセージの取得もあります。