Apache POI 3.10 jar ファイルを使用して .msg ファイルの一部の MAPI プロパティを読み取る際に問題が発生しています。
以下にコードを書きます。
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import org.apache.poi.hsmf.MAPIMessage;
import org.apache.poi.hsmf.datatypes.AttachmentChunks;
public class MessageReader {
public static void main(String[] args) {
try {
FileInputStream file = new FileInputStream("C:\\testMail_1.msg");
MAPIMessage msg = new MAPIMessage(file);
HashMap msg_aspect = new HashMap();
msg_aspect.put("attachment_count",msg.getAttachmentFiles().length);
msg_aspect.put("from_addr", msg.getDisplayFrom());
msg_aspect.put("i_partition", 0);
msg_aspect.put("is_signed", false);
msg_aspect.put("message_class", msg.getMessageClass() );
msg_aspect.put("message_subject",msg.getSubject());
msg_aspect.put("receive_date", msg.getMessageDate().getTime());
msg_aspect.put("send_date", msg.getMessageDate().getTime());
ArrayList attchChk = new ArrayList();
for(AttachmentChunks atchChk :msg.getAttachmentFiles()){
String attachFileName = String.valueOf(((atchChk.attachLongFileName == null)?(atchChk.attachFileName+".msg"):atchChk.attachLongFileName));
attchChk.add(attachFileName);
}
msg_aspect.put("attachment_names", attchChk);
ArrayList toAddr = new ArrayList();
for(String user: msg.getDisplayTo().split(";")){
if(!user.trim().equals("")){
toAddr.add(user.trim());
}
}
msg_aspect.put("to_addr", attchChk);
ArrayList ccAddr = new ArrayList();
for (String user : msg.getDisplayCC().split(";")) {
if(!user.trim().equals("")){
ccAddr.add(user.trim());
}
}
msg_aspect.put("cc_addr", ccAddr);
}catch (Exception e) {
e.printStackTrace();
}
}
}
次の MAPI プロパティと MAPI プロパティの値を読み取るのが困難です。
メッセージのパーティション - メッセージがパーティション化されているかどうかを示す MAPI 属性を見つけることができません。
署名されたメッセージ - メッセージの署名ステータスを伝えることができる MAPI プロパティを追跡できません。
メッセージのシックス - メッセージのサイズを伝えることができる MAPI プロパティを追跡できません。Outlook メッセージ リスト ウィンドウに表示されるメッセージのサイズ。メッセージのサイズが .msg ファイルのサイズと異なることがわかりました。
メッセージの受信日 - MAPI プロパティを追跡できません。メッセージの送信日とは異なります。msg.getMessageDate() が返すのは、メッセージの送信日です。メッセージヘッダーで利用できることがわかりましたが、メッセージヘッダーは受信メールでのみ利用でき、送信メールでは利用できません。
同一Exchangeサーバーまたは同一ドメイン内のユーザー間でメール通信が行われた場合、送信者と受信者の詳細が次の形式で必要です。例:"testUser1"
メール ID が送信者と受信者の両方で利用できる場合でも (To と CC の識別と共に)、それも問題ありません。受信者の電子メール アドレスを取得するために msg.getRecipientEmailAddressList() を試しましたが、この場合、To と CC の受信者はすべて結合されており、To と CC の受信者の詳細を別々に保存する必要があります。
送信者のメールアドレスを取得できません。
サーバーの目的で使用できる MAPI プロパティと、要件を満たすために MAPI プロパティに関連付けられた値を取得する方法を教えてください。
前もって感謝します。