새 PST 생성, 하위 폴더 및 메시지 추가
기존 PST 파일을 구문 분석하는 것뿐만 아니라, Aspose.Email은 처음부터 PST 파일을 생성할 수 있는 방법을 제공합니다. 이 문서에서는 Outlook PST 파일을 만들고 그에 하위 폴더를 추가하는 방법을 보여줍니다.
다음 사용 PersonalStorage 클래스를 사용해 로컬 디스크의 특정 위치에 PST 파일을 생성합니다. 처음부터 PST 파일을 만들려면:
- 다음을 사용하여 PST를 생성합니다 PersonalStorage.create() 메서드.
- Root 폴더에 접근한 뒤 호출하여 PST 파일 루트에 하위 폴더를 추가합니다. addSubFolder() 메서드.
다음 코드 스니펫은 PST 파일을 생성하고 Inbox라는 하위 폴더를 추가하는 방법을 보여줍니다.
// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
// Add new folder "Test"
pst.getRootFolder().addSubFolder("Inbox");
}
OutputStream을 사용하여 2GB 초과 PST 만들기
Aspose.Email 사용자는 PersonalStorage 생성자를 사용해 PST 내부 캐시를 최적화할 수 있습니다:
- blockSize - 캐시 버퍼를 확장하기 위한 최적 블록 크기(바이트).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)
메시지 크기 및 생성된 PST 파일 크기 감소
Aspose.Email은 본문 콘텐츠를 압축하는 기능을 제공하여 메시지 크기를 줄이는 데 도움이 됩니다. 이는 큰 메시지를 전송하거나 제한된 대역폭·스토리지 환경에서 특히 유용합니다. 이를 위해 라이브러리는 다음 메서드에 포함된 compression 매개변수를 제공합니다:
- MapiMessageItemBase.setBodyContent(String content, /BodyContentType/int contentType, boolean compression) - 본문의 내용을 설정합니다.
- MapiMessageItemBase.setBodyRtf(String content, boolean compression) - RTF 형식의 메시지 텍스트를 가져오거나 설정합니다.
아래 코드 스니펫은 MAPI 메시지 본문을 설정하면서 RTF 압축을 사용하는 방법을 보여줍니다:
MapiMessage msg = new MapiMessage("from@doamin.com", "to@domain.com", "subject", "body");
// set the html body and keep it compressed
// this will reduce the message size
msg.setBodyContent(htmlBody, BodyContentType.Html, true);
SeekableByteChannel 스트림 기반 PersonalStorage 생성
Aspose.Email for Java를 사용하면 java.nio.channels를 이용해 개인 저장소(PST) 파일을 작업할 수 있습니다. SeekableByteChannel 스트림을 사용하여 PersonalStorage 인스턴스를 생성할 수 있습니다. 다음 코드 스니펫은 FileChannel 스트림을 기반으로 PersonalStorage 인스턴스를 만들고, 루트 폴더에 "messageFolder"라는 하위 폴더를 추가한 뒤, "messageFolder" 디렉터리의 파일에서 메시지를 가져오는 방법을 보여줍니다:
try (RandomAccessFile raf = new RandomAccessFile("test.pst", "rw")) {
FileChannel channel = raf.getChannel();
try (PersonalStorage pst = PersonalStorage.create(channel, FileFormatVersion.Unicode)) {
FolderInfo messageFolder = pst.getRootFolder().addSubFolder("messageFolder");
for (File f : new File("messageFolder").listFiles()) {
messageFolder.addMessage(MapiMessage.load(f.getAbsolutePath()));
}
}
}
폴더 컨테이너 클래스 변경
때때로 폴더 클래스를 변경해야 할 필요가 있습니다. 일반적인 예로 서로 다른 유형(약속, 메시지 등)의 메시지를 동일한 폴더에 추가하는 경우가 있습니다. 이러한 경우 폴더에 있는 모든 요소가 올바르게 표시되도록 폴더 클래스를 변경해야 합니다. 아래 코드 스니펫은 이 목적을 위해 PST에서 폴더의 컨테이너 클래스를 변경하는 방법을 보여줍니다.
try (PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage1.pst")) {
FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");
folder.changeContainerClass("IPF.Note");
}
성능 향상을 위한 일괄 메시지 추가
PST에 개별 메시지를 추가하면 디스크 I/O가 증가하여 성능이 저하될 수 있습니다. 성능 향상을 위해 메시지를 일괄 모드로 PST에 추가하면 I/O 작업을 최소화할 수 있습니다. addMessages(Iterable
다른 PST에서 메시지 추가
다른 PST에서 메시지를 추가하려면, 다음을 사용합니다: FolderInfo.enumerateMapiMessages() 값을 반환하는 메서드 Iterable<MapiMessage>:
try (PersonalStorage srcPst = PersonalStorage.fromFile("source.pst", false)) {
try (PersonalStorage destPst = PersonalStorage.fromFile("destination.pst")) {
// Get the folder by name
FolderInfo srcFolder = srcPst.getRootFolder().getSubFolder("SomeFolder");
FolderInfo destFolder = destPst.getRootFolder().getSubFolder("SomeFolder");
destFolder.MessageAdded.add(new MessageAddedEventHandler() {
// Handles the MessageAdded event.
public void invoke(Object sender, MessageAddedEventArgs e) {
System.out.println("Added: " + e.getEntryId());
}
});
destFolder.addMessages(srcFolder.enumerateMapiMessages());
}
}
디렉터리에서 메시지 추가
디렉터리에서 메시지를 추가하려면, 다음을 생성합니다: getMessages(String pathToDir) 값을 반환하는 메서드 Iterable<MapiMessage>:
// Read messages from directory.
static Iterable<MapiMessage> getMessages (String pathToDir)
{
return Arrays.stream(listDirectory(pathToDir, "*.msg"))
.map(MapiMessage::load).collect(Collectors.toList());
}
try ( PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
FolderInfo folder = pst.getRootFolder().getSubFolder("SomeFolder");
folder.MessageAdded.add(new MessageAddedEventHandler() {
// Handles the MessageAdded event.
public void invoke(Object sender, MessageAddedEventArgs e) {
System.out.println("Added: " + e.getEntryId());
}
});
folder.addMessages(getMessages("MessageDirectory"));
}