JavaでMSOutlookPSTファイルを読む

PST(個人用ストレージテーブル)は、MS Outlook、Exchange、WindowsメッセージングなどのさまざまなMicrosoftプログラムによってストレージの目的で使用されるよく知られたファイル形式です。 PSTファイルには、メッセージ、連絡先、およびカレンダーやイベントなどの他のアイテムに関する情報を保存できます。場合によっては、PSTファイルを解析し、プログラムでそこからデータを抽出する必要があります。これを実現するために、この記事では、Javaを使用してMSOutlookPSTファイルを読み取る方法を示します。コードサンプルの助けを借りて、フォルダの情報を抽出する方法、電子メールを読む方法、PSTファイルから連絡先を取得する方法を学びます。

OutlookPSTファイルを読み取るためのJavaAPI

Aspose.Email for Javaは、メールを作成および送信するための人気のある機能豊富なメール処理APIです。さらに、一般的な電子メールクライアントやストレージファイル形式で作業することができます。この記事では、Aspose.Email for Javaを使用して、PSTファイルからメッセージやその他の情報を読み取ります。 APIをダウンロードするか、次のMaven構成を使用してインストールできます。

リポジトリ:

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>http://repository.aspose.com/repo/</url>
</repository>

依存:

    <groupId>com.aspose</groupId>
    <artifactId>aspose-email</artifactId>
    <version>22.3</version>
    <classifier>jdk16</classifier>
</dependency>

JavaでOutlookPSTファイルを読む

以下は、PSTファイルを読み取り、その情報を抽出する手順です。

次のコードサンプルは、PSTファイルを読み取ってフォルダの情報を取得する方法を示しています。

// OutlookPSTファイルをロードします
PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage.pst");

// フォルダ情報を取得する
FolderInfoCollection folderInfoCollection = pst.getRootFolder().getSubFolders();

// 各フォルダを参照して情報を表示します
for (int i = 0; i < folderInfoCollection.size(); i++) {
	FolderInfo folderInfo = (FolderInfo) folderInfoCollection.get_Item(i);
	System.out.println("FolderId: " + folderInfo.getEntryIdString());
	System.out.println("Folder: " + folderInfo.getDisplayName());
	System.out.println("Total items: " + folderInfo.getContentCount());
	System.out.println("Total unread items: " + folderInfo.getContentUnreadCount());
	System.out.println("-----------------------------------");
}

JavaでPSTファイルからメールを読む

以下は、JavaでPSTファイルから電子メールメッセージを読み取る手順です。

  • PersonalStorage.fromFile()メソッドを使用してPSTファイルをロードします。
  • PersonalStorage.getRootFolder()メソッドを使用してルートフォルダーにアクセスします。
  • FolderInfo.getContents()メソッドを使用して、各サブフォルダーからメッセージコレクションを取得します。
  • コレクション内のメッセージをループして、各メッセージのフィールドを読み取ります。

次のコードサンプルは、JavaでPSTファイルからメッセージを抽出する方法を示しています。

// OutlookPSTファイルをロードします
PersonalStorage pst = PersonalStorage.fromFile(path);

// PSTファイルの表示形式を取得する
System.out.println("Display Format: " + pst.getFormat());

// フォルダとメッセージの情報を取得する
FolderInfo folderInfo = pst.getRootFolder();

// 再帰メソッドを呼び出して、各フォルダーからmsgファイルを抽出します
extractMsgFiles(folderInfo, pst);

// これは、フォルダの内容を再帰的に表示する方法です。
private static void extractMsgFiles(FolderInfo folderInfo, PersonalStorage pst) {
    // フォルダ名を表示する
    System.out.println("Folder: " + folderInfo.getDisplayName());
    System.out.println("==================================");
    
    // このフォルダ内のすべてのメッセージをループします
    MessageInfoCollection messageInfoCollection = folderInfo.getContents();
    
    for (MessageInfo messageInfo : messageInfoCollection) {
        System.out.println("Saving message {0} ...." + messageInfo.getSubject());
        
        // MapiMessageインスタンスでメッセージを取得します
        MapiMessage message = pst.extractMessage(messageInfo);
        
        // このメッセージをメッセージ形式でディスクに保存します
        message.save(message.getSubject().replace(":", " ") + ".msg");
        
        // このメッセージを保存して、メッセージ形式でストリーミングします
        ByteArrayOutputStream messageStream = new ByteArrayOutputStream();
        message.save(messageStream);
    }

    // サブフォルダごとにこのメソッドを再帰的に呼び出します
    if (folderInfo.hasSubFolders() == true) {
        for (FolderInfo subfolderInfo : folderInfo.getSubFolders()) {
            extractMsgFiles(subfolderInfo, pst);
        }
    }
}

JavaでPSTファイルから連絡先を抽出する

場合によっては、PSTファイルに保存されている連絡先の情報を抽出する必要があります。次の手順は、JavaでPSTファイル内の連絡先にアクセスする方法を示しています。

次のコードサンプルは、JavaでPSTファイルから連絡先を抽出する方法を示しています。

// OutlookPSTファイルをロードします
PersonalStorage pst = PersonalStorage.fromFile("SampleContacts.pst");

// 連絡先フォルダを取得します
FolderInfo folderInfo = pst.getRootFolder().getSubFolder("Contacts");

// このフォルダ内のすべての連絡先をループします
MessageInfoCollection messageInfoCollection = folderInfo.getContents();

for (int i = 0; i < messageInfoCollection.size(); i++) {
	MessageInfo messageInfo = (MessageInfo) messageInfoCollection.get_Item(i);
	
  //  連絡先情報を取得する
	MapiContact contact = (MapiContact) pst.extractMessage(messageInfo).toMapiMessageItem();
	
  //  画面にコンテンツを表示する
	System.out.println("Name: " + contact.getNameInfo().getDisplayName() + "\n");
	
  //  MSG形式でディスクに保存
	if (contact.getNameInfo().getDisplayName() != null) {
		MapiMessage message = pst.extractMessage(messageInfo); // Get rid of illegal characters that cannot be used as a file name
		String messageName = message.getSubject().replace(":", " ").replace("\\", " ").replace("?", " ").replace("/", " ");
		message.save(messageName + ".msg");
	}
}

無料のAPIライセンスを取得する

一時ライセンスの取得を使用すると、Aspose.EmailforJavaを無料で試すことができます。

結論

この記事では、JavaでプログラムでPSTファイルを読み取る方法を学びました。さらに、JavaのPSTファイルからフォルダ情報を抽出し、電子メールをフェッチし、連絡先を取得する方法を見てきました。さらに、ドキュメントを使用して、Aspose.EmailforJavaの詳細を調べることができます。また、ご不明な点やご質問がございましたら、フォーラムまでお気軽にお問い合わせください。

関連項目