Tạo PST mới, Thêm Thư mục Con và Tin nhắn
Cùng với việc phân tích một tệp PST hiện có, Aspose.Email cung cấp cách để tạo một tệp PST từ đầu. Bài viết này trình bày cách tạo tệp PST Outlook và thêm một thư mục con vào đó.
- Tạo tệp PST mới.
- Thay đổi lớp Container của thư mục.
- Thêm Tin nhắn Hàng Loạt với Hiệu Suất Cải Thiện
Sử dụng PersonalStorage lớp để tạo một tệp PST ở một vị trí nào đó trên đĩa cục bộ. Để tạo tệp PST từ đầu:
- Tạo một PST bằng cách sử dụng PersonalStorage.create() phương thức.
- Thêm một thư mục con ở gốc tệp PST bằng cách truy cập thư mục Root và sau đó gọi addSubFolder() phương thức.
Đoạn mã mẫu dưới đây cho bạn thấy cách tạo một tệp PST và thêm một thư mục con có tên Inbox.
// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
// Add new folder "Test"
pst.getRootFolder().addSubFolder("Inbox");
}
Tạo PST với kích thước hơn 2GB bằng OutputStream
Người dùng Aspose.Email có thể tối ưu bộ nhớ cache nội bộ của PST bằng constructor PersonalStorage:
- blockSize - Kích thước khối tối ưu để mở rộng bộ đệm cache (tính bằng byte).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)
Giảm kích thước tin nhắn và kích thước tệp PST được tạo
Aspose.Email cung cấp khả năng nén nội dung phần thân, giúp giảm kích thước tin nhắn. Điều này đặc biệt hữu ích khi gửi các tin nhắn lớn hoặc khi gặp hạn chế về băng thông hoặc dung lượng lưu trữ. Để thực hiện, thư viện cung cấp tham số nén bao gồm trong các phương thức sau:
- MapiMessageItemBase.setBodyContent(String content, /BodyContentType/int contentType, boolean compression) - Đặt nội dung của phần thân.
- MapiMessageItemBase.setBodyRtf(String content, boolean compression) - Lấy hoặc đặt văn bản tin nhắn định dạng RTF.
Đoạn mã dưới đây minh họa cách sử dụng nén RTF khi thiết lập phần thân tin nhắn MAPI:
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);
Tạo PersonalStorage dựa trên Luồng SeekableByteChannel
Aspose.Email cho Java cho phép làm việc với các tệp Personal Storage (PST) bằng java.nio.channels. Nó cho phép bạn tạo một thể hiện PersonalStorage sử dụng luồng SeekableByteChannel. Đoạn mã mẫu dưới đây minh họa cách tạo một thể hiện PersonalStorage dựa trên luồng FileChannel, thêm một thư mục con tên "messageFolder" vào thư mục gốc, và nhập tin nhắn từ các tệp trong thư mục "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()));
}
}
}
Thay đổi Lớp Container của Thư mục
Đôi khi cần thay đổi lớp của một thư mục. Một ví dụ phổ biến là khi các tin nhắn loại khác nhau (cuộc hẹn, tin nhắn, v.v.) được thêm vào cùng một thư mục. Trong các trường hợp như vậy, lớp thư mục cần được thay đổi cho tất cả các phần tử trong thư mục để hiển thị đúng. Đoạn mã mẫu dưới đây cho bạn thấy cách thay đổi lớp container của một thư mục trong PST cho mục đích này.
try (PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage1.pst")) {
FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");
folder.changeContainerClass("IPF.Note");
}
Thêm Tin nhắn Hàng Loạt với Hiệu Suất Cải Thiện
Thêm các tin nhắn riêng lẻ vào PST đồng nghĩa với việc thực hiện nhiều thao tác I/O lên đĩa và có thể làm chậm hiệu suất. Để cải thiện hiệu suất, các tin nhắn có thể được thêm vào PST ở chế độ hàng loạt để giảm thiểu các thao tác I/O. addMessages(Iterable
Thêm Tin nhắn từ PST Khác
Để thêm tin nhắn từ một PST khác, sử dụng FolderInfo.enumerateMapiMessages() phương thức trả về 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());
}
}
Thêm Tin nhắn từ Thư mục
Để thêm tin nhắn từ thư mục, tạo getMessages(String pathToDir) phương thức trả về 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"));
}