PST 파일에서 메시지 작업
PST 파일에 메시지 추가
새 PST 파일을 만들고 하위 폴더 추가 PST 파일을 만들고 하위 폴더를 추가하는 방법을 보여주었습니다. Aspose.Email을 사용하면 생성하거나 로드한 PST 파일의 하위 폴더에 메시지를 추가할 수 있습니다. 이 문서에서는 디스크에서 두 개의 메시지를 PST의 Inbox 하위 폴더에 추가합니다. Use the PersonalStorage 및 FolderInfo PST 파일에 메시지를 추가하기 위한 클래스들. PST 파일의 Inbox 폴더에 메시지를 추가하려면:
- FolderInfo 클래스의 인스턴스를 생성하고 Inbox 폴더의 내용을 로드합니다.
- 디스크에서 Inbox 폴더로 메시지를 추가하려면 다음을 호출합니다 FolderInfo.addMessage() 메서드. FolderInfo 클래스는 다음을 노출합니다 addMessages 폴더에 다수의 메시지를 추가할 수 있게 해 주는 메서드로, 디스크에 대한 I/O 작업을 줄이고 성능을 향상시킵니다. 전체 예제는 아래에서 찾을 수 있습니다, in 대량 메시지 추가.
아래 코드 스니펫은 Inbox라는 PST 하위 폴더에 메시지를 추가하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create new PST
PersonalStorage personalStorage = PersonalStorage.create(dataDir, FileFormatVersion.Unicode);
// Add new folder "Inbox"
personalStorage.getRootFolder().addSubFolder("Inbox");
// Select the "Inbox" folder
FolderInfo inboxFolder = personalStorage.getRootFolder().getSubFolder("Inbox");
// Add some messages to "Inbox" folder
inboxFolder.addMessage(MapiMessage.fromFile(dataDir + "MapiMsgWithPoll.msg"));
대량 메시지 추가
PST에 개별 메시지를 추가하면 디스크에 대한 I/O 작업이 늘어나 성능이 저하될 수 있습니다. 향상된 성능을 위해 메시지를 일괄 모드로 PST에 추가하여 I/O 작업을 최소화할 수 있습니다. The addMessages(Iterable
디스크에서 메시지 로드
다음 코드 스니펫은 디스크에서 메시지를 로드하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
private static void addMessagesInBulkMode(String fileName, String msgFolderName) {
try (PersonalStorage personalStorage = PersonalStorage.fromFile(fileName)) {
FolderInfo folder = personalStorage.getRootFolder().getSubFolder("myInbox");
folder.MessageAdded.add(new MessageAddedEventHandler() {
public void invoke(Object sender, MessageAddedEventArgs e) {
onMessageAdded(sender, e);
}
});
folder.addMessages(new MapiMessageCollection(msgFolderName));
}
}
static void onMessageAdded(Object sender, MessageAddedEventArgs e) {
System.out.println(e.getEntryId());
System.out.println(e.getMessage().getSubject());
}
Iterable 구현
다음 코드 스니펫은 Iterable 구현을 만드는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
public class MapiMessageCollection implements Iterable<MapiMessage> {
private final File folder;
public MapiMessageCollection(String folder) {
this.folder = new File(folder);
}
public Iterator<MapiMessage> iterator() {
return new MapiMessageIterator(folder.listFiles());
}
}
public class MapiMessageIterator implements Iterator<MapiMessage> {
private Queue<String> queue = new LinkedList<String>();
public MapiMessageIterator(File[] listOfFiles) {
for (File file : listOfFiles) {
queue.offer(file.getAbsolutePath());
}
}
public boolean hasNext() {
return !queue.isEmpty();
}
public MapiMessage next() {
return MapiMessage.fromFile(queue.poll());
}
}
다른 PST에서 메시지 추가
다른 PST에서 메시지를 추가하려면 다음을 사용하십시오: FolderInfo.enumerateMapiMessages() Iterable
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
private static void bulkAddFromAnotherPst(String source) {
// The path to the File directory.
String dataDir = "data/";
try (PersonalStorage pst = PersonalStorage.fromFile(source, false)) {
try (PersonalStorage pstDest = PersonalStorage.fromFile(dataDir + "PersonalStorageFile1.pst")) {
// Get the folder by name
FolderInfo folderInfo = pst.getRootFolder().getSubFolder("Contacts");
MessageInfoCollection ms = folderInfo.getContents();
// Get the folder by name
FolderInfo f = pstDest.getRootFolder().getSubFolder("myInbox");
f.MessageAdded.add(new MessageAddedEventHandler() {
public void invoke(Object sender, MessageAddedEventArgs e) {
onMessageAdded(sender, e);
}
});
f.addMessages(folderInfo.enumerateMapiMessages());
FolderInfo fi = pstDest.getRootFolder().getSubFolder("myInbox");
MessageInfoCollection msgs = fi.getContents();
}
}
}
// Handles the MessageAdded event.
static void onMessageAdded(Object sender, MessageAddedEventArgs e) {
System.out.println(e.getEntryId());
System.out.println(e.getMessage().getSubject());
}
Outlook PST 파일에서 메시지 정보 가져오기
에서 Outlook PST 파일을 읽고 폴더 및 하위 폴더 정보 가져오기, Outlook PST 파일을 로드하고 폴더를 탐색하여 폴더 이름 및 메시지 수를 가져오는 방법을 논의했습니다. 이 문서는 PST 파일의 모든 폴더와 하위 폴더를 읽고 메시지 정보(예: 제목, 발신자, 수신자)를 표시하는 방법을 설명합니다. FolderInfo.getContents() 메서드는 표시하는 데 사용됩니다 간단한 메시지 정보 제목, 발신자, 수신자와 같은 정보를. 성능 측면에서 이는 메시지 기본 정보를 얻기에 가장 적합한 옵션입니다. 추출 전체 메시지 데이터, PersonalStorage.extractMessage() 메서드가 제공됩니다. Outlook PST 파일에는 중첩 폴더가 포함될 수 있습니다. 이러한 폴더와 최상위 폴더의 메시지 정보를 얻으려면 재귀 메서드를 사용하여 모든 폴더를 읽으십시오. 다음 코드 조각은 Outlook PST 파일을 읽고 폴더 및 메시지 내용을 재귀적으로 표시하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
public static void run() {
// The path to the File directory.
String dataDir = "data/";
// Load the Outlook file
String path = dataDir + "PersonalStorage.pst";
try {
// Load the Outlook PST file
PersonalStorage personalStorage = PersonalStorage.fromFile(path);
// Get the Display Format of the PST file
System.out.println("Display Format: " + personalStorage.getFormat());
// Get the folders and messages information
FolderInfo folderInfo = personalStorage.getRootFolder();
// Call the recursive method to display the folder contents
displayFolderContents(folderInfo, personalStorage);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
// This is a recursive method to display contents of a folder
private static void displayFolderContents(FolderInfo folderInfo, PersonalStorage pst) {
// Display the folder name
System.out.println("Folder: " + folderInfo.getDisplayName());
System.out.println("==================================");
// Display information about messages inside this folder
MessageInfoCollection messageInfoCollection = folderInfo.getContents();
for (MessageInfo messageInfo : messageInfoCollection) {
System.out.println("Subject: " + messageInfo.getSubject());
System.out.println("Sender: " + messageInfo.getSenderRepresentativeName());
System.out.println("Recipients: " + messageInfo.getDisplayTo());
System.out.println("------------------------------");
}
// Call this method recursively for each subfolder
if (folderInfo.hasSubFolders() == true) {
for (FolderInfo subfolderInfo : folderInfo.getSubFolders()) {
displayFolderContents(subfolderInfo, pst);
}
}
}
PST 파일에서 메시지 추출
이 문서는 Microsoft Outlook PST 파일을 읽는 방법과 메시지 추출. 그런 다음 메시지를 MSG 형식으로 디스크에 저장합니다. 이 문서는 또한 다음 방법을 보여줍니다 특정 개수의 메시지를 추출합니다 PST 파일에서. 모든 폴더(중첩 폴더 포함)를 탐색하는 재귀 메서드를 사용하고 다음을 호출합니다: PersonalStorage.extractMessage() Outlook 메시지를 해당 클래스 인스턴스로 가져오는 메서드 MapiMessage 클래스. 이후에 다음을 호출합니다: MapiMessage.save() MSG 형식으로 메시지를 디스크 또는 스트림에 저장하는 메서드입니다. 다음 코드 조각은 PST 파일에서 메시지를 추출하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
public static void run() {
// The path to the File directory.
String dataDir = "data/";
// Load the Outlook file
String path = dataDir + "PersonalStorage.pst";
try {
// load the Outlook PST file
PersonalStorage pst = PersonalStorage.fromFile(path);
// get the Display Format of the PST file
System.out.println("Display Format: " + pst.getFormat());
// get the folders and messages information
FolderInfo folderInfo = pst.getRootFolder();
// Call the recursive method to extract msg files from each folder
extractMsgFiles(folderInfo, pst);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
// This is a recursive method to display contents of a folder
private static void extractMsgFiles(FolderInfo folderInfo, PersonalStorage pst) {
// display the folder name
System.out.println("Folder: " + folderInfo.getDisplayName());
System.out.println("==================================");
// loop through all the messages in this folder
MessageInfoCollection messageInfoCollection = folderInfo.getContents();
for (MessageInfo messageInfo : messageInfoCollection) {
System.out.println("Saving message {0} ...." + messageInfo.getSubject());
// get the message in MapiMessage instance
MapiMessage message = pst.extractMessage(messageInfo);
// save this message to disk in msg format
message.save(message.getSubject().replace(":", " ") + ".msg");
// save this message to stream in msg format
ByteArrayOutputStream messageStream = new ByteArrayOutputStream();
message.save(messageStream);
}
// Call this method recursively for each subfolder
if (folderInfo.hasSubFolders() == true) {
for (FolderInfo subfolderInfo : folderInfo.getSubFolders()) {
extractMsgFiles(subfolderInfo, pst);
}
}
}
PST에서 스트림으로 직접 메시지 저장
메시지의 MsgInfo를 추출하지 않고 PST 파일에서 직접 스트림으로 메시지를 저장하려면 다음을 사용합니다: saveMessageToStream() 메서드. 다음 코드 조각은 PST에서 직접 스트림으로 메시지를 저장하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/";
// Load the Outlook file
String path = dataDir + "PersonalStorage.pst";
// Save message to MemoryStream
try (PersonalStorage personalStorage = PersonalStorage.fromFile(path)) {
FolderInfo inbox = personalStorage.getRootFolder().getSubFolder("Inbox");
for (MessageInfo messageInfo : inbox.enumerateMessages()) {
try (ByteArrayOutputStream memeorystream = new ByteArrayOutputStream()) {
personalStorage.saveMessageToStream(messageInfo.getEntryIdString(), memeorystream);
}
}
}
// Save message to file
try (PersonalStorage pst = PersonalStorage.fromFile(path)) {
FolderInfo inbox = pst.getRootFolder().getSubFolder("Inbox");
for (MessageInfo messageInfo : inbox.enumerateMessages()) {
try (FileOutputStream fs = new FileOutputStream(new File(dataDir + messageInfo.getSubject() + ".msg"))) {
pst.saveMessageToStream(messageInfo.getEntryIdString(), fs);
}
}
}
try (PersonalStorage pst = PersonalStorage.fromFile(path)) {
FolderInfo inbox = pst.getRootFolder().getSubFolder("Inbox");
// To enumerate entryId of messages you may use FolderInfo.EnumerateMessagesEntryId() method:
for (String entryId : inbox.enumerateMessagesEntryId()) {
try (ByteArrayOutputStream ms = new ByteArrayOutputStream()) {
pst.saveMessageToStream(entryId, ms);
}
}
}
PST 파일에서 n개의 메시지 추출
다음 코드 조각은 PST에서 지정된 개수의 메시지를 추출하는 방법을 보여줍니다. 첫 번째 메시지의 인덱스와 추출할 메시지 총 개수를 제공하기만 하면 됩니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
FolderInfo inbox = personalStorage.getRootFolder().getSubFolder("Inbox");
// Extracts messages starting from 10th index top and extract total 100 messages
MessageInfoCollection messages = inbox.getContents(10, 100);
PST 파일에서 항목 총 수 가져오기
Aspose.Email은 다음을 제공합니다 GetTotalItemsCount() 메서드 PersonalStorage.Store 속성. PST에 포함된 메시지 항목의 총 수를 반환합니다.
다음 코드 샘플은 PST 파일에 저장된 항목(메시지, 일정, 연락처 등)의 총 개수를 검색하는 방법을 보여줍니다:
try (PersonalStorage pst = PersonalStorage.fromFile("my.pst", false)) {
int count = pst.getStore().getTotalItemsCount();
}
PST 파일에서 항목 삭제
Add Messages to PST Files PST 파일에 메시지를 추가하는 방법을 보여주었습니다. 물론 PST 파일에서 항목(내용)을 삭제하는 것도 가능하며, 메시지를 일괄 삭제하는 것이 바람직할 수도 있습니다. PST 파일의 항목은 다음을 사용하여 삭제할 수 있습니다: FolderInfo.deleteChildItem() 메서드. API는 또한 제공합니다 FolderInfo.deleteChildItems() PST 파일에서 항목을 일괄 삭제하는 메서드입니다.
PST 파일에서 메시지 삭제
이 문서는 사용 방법을 보여줍니다 FolderInfo PST 파일의 특정 폴더에 접근하는 클래스입니다. 이전에 로드하거나 만든 PST 파일의 Sent 하위 폴더에서 메시지를 삭제하려면:
- 다음의 인스턴스를 생성합니다. FolderInfo 클래스와 Sent 하위 폴더의 내용을 로드합니다.
- Sent 폴더의 메시지를 삭제하려면 호출합니다: FolderInfo.deleteChildItem() 메서드와 전달하는 MessageInfo.EntryId 매개변수로 사용됩니다. 다음 코드 조각은 PST 파일의 Sent 하위 폴더에서 메시지를 삭제하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/" + "Sub.pst";
// Load the Outlook PST file
PersonalStorage personalStorage = PersonalStorage.fromFile(dataDir);
// Get the Sent items folder
FolderInfo folderInfo = personalStorage.getPredefinedFolder(StandardIpmFolder.SentItems);
MessageInfoCollection msgInfoColl = folderInfo.getContents();
for (MessageInfo msgInfo : msgInfoColl) {
System.out.println(msgInfo.getSubject() + ": " + msgInfo.getEntryIdString());
if (msgInfo.getSubject().equals("some delete condition")) {
// Delete this item
folderInfo.deleteChildItem(msgInfo.getEntryId());
System.out.println("Deleted this message");
}
}
PST 파일에서 폴더 삭제
PST 폴더를 삭제된 항목 폴더로 이동하여 삭제할 수 있습니다.
try (PersonalStorage pst = PersonalStorage.fromFile("test.pst")) {
FolderInfo deletedItemsFolder = pst.getPredefinedFolder(StandardIpmFolder.DeletedItems);
FolderInfo emptyFolder = pst.getRootFolder().getSubFolder("Empty folder");
FolderInfo someFolder = pst.getRootFolder().getSubFolder("Some folder");
pst.moveItem(emptyFolder, deletedItemsFolder);
pst.moveItem(someFolder, deletedItemsFolder);
}
이 방법의 장점은 삭제된 폴더를 쉽게 복구할 수 있다는 점입니다.
FolderInfo someFolder = deletedItemsFolder.getSubFolder("Some folder");
pst.moveItem(someFolder, pst.getRootFolder());
필요한 경우 삭제된 항목 폴더에서 폴더를 영구적으로 제거할 수도 있습니다.
deletedItemsFolder.deleteChildItem(emptyFolder.getEntryId());
다음은 deleteChildItem() 메서드는 삭제된 항목 폴더를 우회하여 하위 폴더를 즉시 영구 삭제하려는 경우 모든 폴더에 사용할 수 있습니다.
FolderInfo someFolder = pst.getRootFolder().getSubFolder("Some folder");
pst.getRootFolder().deleteChildItem(someFolder.getEntryId());
PST 파일에서 항목을 일괄 삭제
Aspose.Email API를 사용하여 PST 파일에서 항목을 일괄 삭제할 수 있습니다. 이는 다음을 사용하여 구현됩니다: deleteChildItems() 삭제할 항목을 가리키는 Entry ID 목록을 받는 메서드입니다. 다음 코드 조각은 PST 파일에서 항목을 일괄 삭제하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/" + "Sub.pst";
try (PersonalStorage personalStorage = PersonalStorage.fromFile(dataDir)) {
// Get Inbox SubFolder from Outlook file
FolderInfo inbox = personalStorage.getRootFolder().getSubFolder("Inbox");
// Create instance of PersonalStorageQueryBuilder
PersonalStorageQueryBuilder queryBuilder = new PersonalStorageQueryBuilder();
queryBuilder.getFrom().contains("someuser@domain.com");
MessageInfoCollection messages = inbox.getContents(queryBuilder.getQuery());
List<String> deleteList = new ArrayList<String>();
for (MessageInfo messageInfo : messages) {
deleteList.add(messageInfo.getEntryIdString());
}
// delete messages having From = "someuser@domain.com"
inbox.deleteChildItems(deleteList);
}
PST에서 소프트 삭제된 메시지 열거 및 복구
Aspose.Email for Java를 사용하면 영구 삭제된 메시지를 검색할 수 있습니다. API를 통해 PST 파일에서 소프트 삭제된 메시지를 열거할 수 있습니다. 소프트 삭제된 항목은 두 번 삭제된 메시지로, 먼저 삭제된 항목 폴더로 이동된 후 다시 제거됩니다. 이러한 메시지는 여전히 복구 가능하며, Aspose.Email는 이를 접근하는 편리한 방법을 제공합니다. PersonalStorage.findAndEnumerateSoftDeletedItems() 메서드는 컬렉션을 반환합니다 RestoredItemEntry 객체. 각 항목은 다음을 포함합니다:
- MapiMessage item — 복구된 메시지.
- String FolderId - 원래 메시지가 속한 폴더의 식별자.
다음 코드 샘플은 PST 파일에서 소프트 삭제된(복구 가능한) 이메일 항목을 열거하는 방법을 보여줍니다:
// Load the PST file
try (PersonalStorage pst = PersonalStorage.fromFile(fileName)) {
// Enumerate soft-deleted items
for (RestoredItemEntry entry : pst.findAndEnumerateSoftDeletedItems()) {
MapiMessage message = entry.getItem();
String folderId = entry.getFolderId();
System.out.println("Subject: " + message.getSubject());
System.out.println("Deleted from Folder ID: " + folderId);
System.out.println("-----------------------------------");
}
}
기준에 따라 PST에서 메시지 및 폴더 검색
개인 저장소(PST) 파일은 방대한 데이터를 포함할 수 있으며, 이러한 대용량 파일에서 특정 기준을 만족하는 데이터를 검색하려면 정보를 필터링하기 위해 코드에 여러 체크 포인트를 포함해야 합니다. 이를 통해 PersonalStorageQueryBuilder 클래스, Aspose.Email를 사용하면 지정된 검색 기준에 따라 PST에서 특정 레코드를 검색할 수 있습니다. PST는 발신자, 수신자, 제목, 메시지 중요도, 첨부 파일 존재 여부, 메시지 크기, 심지어 메시지 ID와 같은 검색 매개변수를 기반으로 메시지를 검색할 수 있습니다. PersonalStorageQueryBuilder 하위 폴더 검색에도 사용할 수 있습니다.
PST에서 메시지 및 폴더 검색
다음 코드 스니펫은 사용 방법을 보여줍니다. PersonalStorageQueryBuilder 다양한 검색 기준에 따라 PST 내용 검색을 수행하는 클래스입니다. 예를 들어, 다음과 같이 PST를 검색하는 방법을 보여줍니다:
- 메시지 중요도.
- 메시지 클래스.
- 첨부 파일 존재 여부.
- 메시지 크기.
- 메시지 날짜.
- 읽지 않은 메시지.
- 첨부 파일이 있는 읽지 않은 메시지, 그리고
- 특정 하위 폴더 이름을 가진 폴더.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/";
try (PersonalStorage personalStorage = PersonalStorage.fromFile(dataDir + "Outlook.pst")) {
FolderInfo folder = personalStorage.getRootFolder().getSubFolder("Inbox");
PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder();
// High importance messages
builder.getImportance().equals((int) MapiImportance.High);
MessageInfoCollection messages = folder.getContents(builder.getQuery());
System.out.println("Messages with High Imp:" + messages.size());
builder = new PersonalStorageQueryBuilder();
builder.getMessageClass().equals("IPM.Note");
messages = folder.getContents(builder.getQuery());
System.out.println("Messages with IPM.Note:" + messages.size());
builder = new PersonalStorageQueryBuilder();
// Messages with attachments AND high importance
builder.getImportance().equals((int) MapiImportance.High);
builder.hasFlags(MapiMessageFlags.MSGFLAG_HASATTACH);
messages = folder.getContents(builder.getQuery());
System.out.println("Messages with atts: " + messages.size());
builder = new PersonalStorageQueryBuilder();
// Messages with size > 15 KB
builder.getMessageSize().greater(15000);
messages = folder.getContents(builder.getQuery());
System.out.println("messags size > 15Kb:" + messages.size());
java.util.Calendar c = java.util.Calendar.getInstance();
builder = new PersonalStorageQueryBuilder();
// Messages by Current Date
// (Note that queries by date are not supported for Calendar Items in the Appointments folder)
builder.getSentDate().on(c.getTime(), DateComparisonType.ByDate);
messages = folder.getContents(builder.getQuery());
System.out.println("Messages by Current Date: " + messages.size());
builder = new PersonalStorageQueryBuilder();
// Messages between Dates
// (Note that queries by date are not supported for Calendar Items in the Appointments folder)
c.set(2020, 0, 1, 0, 0, 0);
builder.getSentDate().since(c.getTime());
c.set(2021, 0, 1, 0, 0, 0);
builder.getSentDate().before(c.getTime());
messages = folder.getContents(builder.getQuery());
System.out.println("Messages between Dates: " + messages.size());
builder = new PersonalStorageQueryBuilder();
// Unread messages
builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ);
messages = folder.getContents(builder.getQuery());
System.out.println("Unread:" + messages.size());
builder = new PersonalStorageQueryBuilder();
// Unread messages with attachments
builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ);
builder.hasFlags(MapiMessageFlags.MSGFLAG_HASATTACH);
messages = folder.getContents(builder.getQuery());
System.out.println("Unread msgs with atts: " + messages.size());
// Folder with name of 'SubInbox'
builder = new PersonalStorageQueryBuilder();
builder.getFolderName().equals("SubInbox");
FolderInfoCollection folders = folder.getSubFolders(builder.getQuery());
System.out.println("Folder having subfolder: " + folders.size());
builder = new PersonalStorageQueryBuilder();
// Folders with subfolders
builder.hasSubfolders();
folders = folder.getSubFolders(builder.getQuery());
System.out.println(folders.size());
}
대소문자 구분 없이 PST에서 문자열 검색
다음 코드 조각은 대소문자를 무시하는 매개변수를 사용하여 PST에서 문자열을 검색하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/";
try (PersonalStorage personalStorage = PersonalStorage.create(dataDir + "CaseSensitivity.pst", FileFormatVersion.Unicode)) {
FolderInfo folderinfo = personalStorage.createPredefinedFolder("Inbox", StandardIpmFolder.Inbox);
folderinfo.addMessage(MapiMessage.fromMailMessage(MailMessage.load("Sample.eml")));
PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder();
// IgnoreCase is True
builder.getFrom().contains("automated", true);
MailQuery query = builder.getQuery();
MessageInfoCollection coll = folderinfo.getContents(query);
System.out.println(coll.size());
}
PST 파일에서 여러 키워드로 메시지 제목 검색
다음과 같이 사용할 수 있습니다 MailQueryBuilder.or 아래와 같이 지정된 단어 중 하나 이상을 포함하는 제목을 가진 메시지를 찾는 메서드:
PersonalStorageQueryBuilder builder1 = new PersonalStorageQueryBuilder();
builder1.getSubject().contains("Review"); // 'Review' is key word for the search
PersonalStorageQueryBuilder builder2 = new PersonalStorageQueryBuilder();
builder2.getSubject().contains("Error"); // 'Error' is also key word for the search
PersonalStorageQueryBuilder queryBuilder = new PersonalStorageQueryBuilder();
queryBuilder.or(builder1.getQuery(), builder2.getQuery()); // message subjects must contain 'Review' or 'Error' words
try (PersonalStorage storage = PersonalStorage.fromFile("example.pst"))
{
FolderInfo folderInfo = storage.getRootFolder().getSubFolder("Inbox");
MessageInfoCollection messageInfos = folderInfo.getContents(queryBuilder.getQuery());
for (MessageInfo messageInfo : messageInfos)
{
System.out.println(messageInfo.getSubject());
}
}
PST 폴더 내용 페이지별 검색
대용량 폴더를 탐색할 때 애플리케이션 성능과 제어를 향상시킵니다. Aspose.Email 오버로드를 사용하여 페이지 방식으로 폴더 내용을 검색합니다. getContents 메서드. 이 메서드는 - FolderInfo.getContents(MailQuery query, int startIndex, int count) - 지정된 쿼리와 일치하는 메시지의 일부분을 주어진 인덱스부터 개수 제한으로 가져옵니다. 다음 코드 샘플은 PST 폴더에서 필터링된 메시지를 페이지별로 검색하고 처리하는 방법을 보여줍니다:
// Load the PST file
try (PersonalStorage pst = PersonalStorage.fromFile(fileName)) {
// Access a specific subfolder
FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");
// Build a query to filter messages by sender address
PersonalStorageQueryBuilder queryBuilder = new PersonalStorageQueryBuilder();
queryBuilder.getFrom().contains("report-service", true);
// Define the page size
int pageSize = 5;
// Retrieve and process messages in pages
for (int pageIndex = 0; pageIndex < 6; pageIndex++) {
int startIndex = pageIndex * pageSize;
// Get a page of messages
MessageInfoCollection messages = folder.getContents(queryBuilder.getQuery(), startIndex, pageSize);
for (MessageInfo messageInfo : messages) {
// Output basic info about each message
System.out.println("Subject: " + messageInfo.getSubject() + ", Sender: " + messageInfo.getSenderRepresentativeName());
}
}
}
PST 파일의 다른 폴더로 항목 이동
Aspose.Email를 사용하면 동일한 개인 저장소(PST) 파일 내에서 소스 폴더의 항목을 다른 폴더로 이동할 수 있습니다. 여기에는 다음이 포함됩니다:
- 지정된 폴더를 새 상위 폴더로 이동하기.
- 지정된 메시지를 새 폴더로 이동하기.
- 내용을 새 폴더로 이동하기.
- 하위 폴더를 새 상위 폴더로 이동하기.
다음 코드 조각은 동일한 PST 파일 내에서 소스 폴더의 메시지 및 폴더와 같은 항목을 다른 폴더로 이동하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
try (PersonalStorage personalStorage = PersonalStorage.fromFile("test.pst")) {
FolderInfo inbox = personalStorage.getPredefinedFolder(StandardIpmFolder.Inbox);
FolderInfo deleted = personalStorage.getPredefinedFolder(StandardIpmFolder.DeletedItems);
FolderInfo subfolder = inbox.getSubFolder("Subfolder");
// Move folder and message to the Deleted Items
personalStorage.moveItem(subfolder, deleted);
MessageInfoCollection contents = subfolder.getContents();
personalStorage.moveItem(contents.get(0), deleted);
// Move all inbox subfolders and subfolder contents to the Deleted Items
inbox.moveSubfolders(deleted);
subfolder.moveContents(deleted);
}
PST 파일에서 메시지 속성 업데이트
때때로 메시지의 제목 변경, 중요도 표시 등과 같이 특정 속성을 업데이트해야 할 경우가 있습니다. 이러한 속성 변경을 포함한 PST 파일의 메시지를 업데이트하려면 FolderInfo.changeMessages 이 메서드. 이 문서는 PST 파일에서 메시지 속성을 일괄 변경하는 방법을 보여줍니다. 다음 코드 스니펫은 PST 파일의 여러 메시지에 대해 일괄 모드로 속성을 업데이트하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/" + "Sub.pst";
// Load the Outlook PST file
PersonalStorage personalStorage = PersonalStorage.fromFile(dataDir);
// Get Requierd Subfolder
FolderInfo inbox = personalStorage.getRootFolder().getSubFolder("Inbox");
// find messages having From = "someuser@domain.com"
PersonalStorageQueryBuilder queryBuilder = new PersonalStorageQueryBuilder();
queryBuilder.getFrom().contains("someuser@domain.com");
// Get Contents from Query
MessageInfoCollection messages = inbox.getContents(queryBuilder.getQuery());
// Save (MessageInfo,EntryIdString) in List
List<String> changeList = new ArrayList<String>();
for (MessageInfo messageInfo : messages) {
changeList.add(messageInfo.getEntryIdString());
}
// Compose the new properties
MapiPropertyCollection updatedProperties = new MapiPropertyCollection();
updatedProperties.add(MapiPropertyTag.PR_SUBJECT_W, new MapiProperty(MapiPropertyTag.PR_SUBJECT_W, "New Subject".getBytes(Charset.forName("utf-16le"))));
updatedProperties.add(MapiPropertyTag.PR_IMPORTANCE, new MapiProperty(MapiPropertyTag.PR_IMPORTANCE, BitConverter.getBytesInt64(2)));
// update messages having From = "someuser@domain.com" with new properties
inbox.changeMessages(changeList, updatedProperties);
PST 파일에서 사용자 정의 속성 업데이트
때때로 PST 파일 내에서 처리된 항목을 표시해야 할 필요가 있습니다. Aspose.Email API는 MapiProperty와 MapiNamedProperty를 사용해 이를 구현할 수 있습니다. 다음 메서드들이 도움이 됩니다.
- constructor MapiNamedProperty(long propertyTag, String nameIdentifier, UUID propertyGuid, byte[] propertyValue)
- constructor MapiNamedProperty(long propertyTag, long nameIdentifier, UUID propertyGuid, byte[] propertyValue)
- FolderInfo.changeMessages(MapiPropertyCollection updatedProperties) - changes all messages in folder
- PersonalStorage.changeMessage(String entryId, MapiPropertyCollection updatedProperties) - change message properties
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
public static void run() {
// The path to the File directory.
String dataDir = "data/" + "Sub.pst";
try (PersonalStorage personalStorage = PersonalStorage.fromFile(dataDir)) {
FolderInfo testFolder = personalStorage.getRootFolder().getSubFolder("Inbox");
// Create the collection of message properties for adding or updating
MapiPropertyCollection newProperties = new MapiPropertyCollection();
// Normal, Custom and PidLidLogFlags named property
MapiProperty property = new MapiProperty(MapiPropertyTag.PR_ORG_EMAIL_ADDR_W, "test_address@org.com".getBytes(Charset.forName("utf-16le")));
MapiProperty namedProperty1 = new MapiNamedProperty(generateNamedPropertyTag(0L, MapiPropertyType.PT_LONG), "ITEM_ID", UUID.randomUUID(),
BitConverter.getBytesInt64(123));
MapiProperty namedProperty2 = new MapiNamedProperty(generateNamedPropertyTag(1L, MapiPropertyType.PT_LONG), 0x0000870C,
UUID.fromString("0006200A-0000-0000-C000-000000000046"), BitConverter.getBytesInt64(0));
newProperties.add(namedProperty1.getTag(), namedProperty1);
newProperties.add(namedProperty2.getTag(), namedProperty2);
newProperties.add(property.getTag(), property);
testFolder.changeMessages(testFolder.enumerateMessagesEntryId(), newProperties);
}
}
private static long generateNamedPropertyTag(long index, int dataType) {
return (((0x8000 | index) << 16) | (long) dataType) & 0x00000000FFFFFFFFL;
}
전체 메시지를 추출하지 않고 첨부 파일 추출
Aspose.Email API를 사용하면 PST 메시지에서 전체 메시지를 먼저 추출하지 않고도 첨부 파일을 추출할 수 있습니다. ExtractAttachments 메서드 PersonalStorage 이를 위해 사용할 수 있습니다. 다음 코드 스니펫은 전체 메시지를 추출하지 않고 첨부 파일만 추출하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/";
try (PersonalStorage personalstorage = PersonalStorage.fromFile(dataDir + "Outlook.pst")) {
FolderInfo folder = personalstorage.getRootFolder().getSubFolder("Inbox");
for (String messageInfo : folder.enumerateMessagesEntryId()) {
MapiAttachmentCollection attachments = personalstorage.extractAttachments(messageInfo);
if (attachments.size() != 0) {
for (MapiAttachment attachment : attachments) {
if (attachment.getLongFileName() != null && !attachment.getLongFileName().isEmpty()) {
if (attachment.getLongFileName().contains(".msg")) {
continue;
} else {
attachment.save(dataDir + "Attachments/" + attachment.getLongFileName());
}
}
}
}
}
}
PST에 파일 추가
Microsoft Outlook의 주요 기능은 이메일, 캘린더, 작업, 연락처 및 저널 항목을 관리하는 것입니다. 또한 파일을 PST 폴더에 추가할 수 있으며, 이렇게 추가된 파일은 PST에 기록됩니다. Aspose.Email은 메시지, 연락처, 작업 및 저널 항목을 PST에 추가하는 것과 동일한 방식으로 폴더에 파일을 추가하는 기능을 제공합니다. 다음 코드 스니펫은 Aspose.Email을 사용해 PST 폴더에 문서를 추가하는 방법을 보여줍니다.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/";
try (PersonalStorage personalStorage = PersonalStorage.create(dataDir + "Ps1_out.pst", FileFormatVersion.Unicode)) {
FolderInfo folder = personalStorage.getRootFolder().addSubFolder("Files");
// Add Document.doc file with the "IPM.Document" message class by default.
folder.addFile(dataDir + "attachment_1.doc", null);
}