SQLの窓

2011年09月30日


javamail 1.4.4 : IMAP で、ユーザから別のユーザへメッセージを全て(範囲指定で)コピーする

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 );
		}

	}

}

メッセージの取得には、単一メッセージの取得もあります。


posted by lightbox at 2011-09-30 21:17 | java : 通信関連 | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり