- PR -

JavaMailでMessageがnullになる

1
投稿者投稿内容
とも
会議室デビュー日: 2005/08/12
投稿数: 10
投稿日時: 2007-02-20 18:47
はじめまして。

Seasarでメールを受信し、DBに格納するバッチを作成していますが、
下記の処理で、受信フォルダにあるメール総件数は正しく取得できるのですが、
folderからgetMessageした、receiveMessage からgetSubjectすると、
nullになってしまします。送信日時・送信アドレス等も同様に null です。

下記処理を動作確認用に作成したjavaファイル(mainメソッドのみの簡単な)で
実行すると、正しく取得できるのですが・・・

Java自体それそど経験がないので、Seasarが原因なのかどうかも、
さっぱり分かりません。


/** 受信フォルダにあるメール総件数取得 */
totalMessagesCnt = folder.getMessageCount();

/**
* 受信メール分ループし、メールを配列に設定する。
*/
for (int idx1 = 0; idx1 < totalMessagesCnt; idx1++) {
// メール受信
receiveMessage = (Message)folder.getMessage(idx1 + 1);

System.out.println(receiveMessage.getSubject());

addArrayList(argTotalMailData, receiveMessage);
}

よろしくお願い致します。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-02-20 19:53
引用:

ともさんの書き込み (2007-02-20 18:47) より:
for (int idx1 = 0; idx1 < totalMessagesCnt; idx1++) {
}



getMessage()のJavadocにはmsgnumは「1から」と書いてあります。
初期値を1とするとうまく行くかもしれません。

#当前ながら終端の判定も変えないと最後の一件を見れません。
とも
会議室デビュー日: 2005/08/12
投稿数: 10
投稿日時: 2007-02-20 20:03
あしゅ様、ご指摘ありがとうございます。

folder.getMessageの際に、(idx1 + 1)しておりますので、
「1から」取得しております。

動作確認用では、正しく取得できています。

Seasarでの開発という事で、diconファイルよりDIしており
その辺りの原因なのでしょうか?

よろしくお願い致します。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-02-20 20:18
引用:

ともさんの書き込み (2007-02-20 20:03) より:
folder.getMessageの際に、(idx1 + 1)しておりますので、
「1から」取得しております。



おっと、見落としてました。。
すみません。

でしたら、そこのコードは良さそうです。
原因の切り分けのために、JavaMail部分は全く同じで
Seasarを使わないだけのコードで試されてはいかがでしょうか。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-02-20 21:10
MessageNumberはサーバ側依存で、どんな数字が割り振られていても文句はいえないと思いますが。
現在の通数が100だとして、必ず1〜100で返るとは限りません。
getMessages()で全部取るのはまずいですか?
とも
会議室デビュー日: 2005/08/12
投稿数: 10
投稿日時: 2007-02-20 22:25
あしゅ様、mio様ありがとうございます。

getMessages()で全部取ってみたのですが、Message は null でした。

今、デバッグしていて気付いたのですが
folder から getMessage した receiveMessage の session が
null になっています。
動作確認用javaでは、メールサーバー接続時に作成した session が
入っているのですが・・・

原因が以下にあるのか分からないのですが、
Seasarに、geronimo-j2ee_1.4_spec-1.0.jar というのが入ってまして、
その中に、javax.mail. と javax.activation. のパッケージがあるのですが、
動作確認用のjavaでは、mail.jar と activation.jar を使用しています。

Seasarに作成しているjavaに、mail.jar と activation.jar を見に行くように
する事は可能なのでしょうか?

よろしくおねがいします。
とも
会議室デビュー日: 2005/08/12
投稿数: 10
投稿日時: 2007-02-22 12:55
Seasarに含まれている、geronimo-XXXXXXXX.jar の中に、
activation.jar、mail.jarの一部が含まれており、
それが原因で受信が正しく行えないなかった様です。

Eclipse上で、activation.jar、mail.jarの優先順位を
geronimo-XXXXXXXX.jarより上にする事により
正常に受信できるようになりました。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)