Làm việc với các tệp PST lớn
Xử lý các tệp Personal Storage Table (PST) lớn có thể làm giảm hiệu suất và tăng mức sử dụng bộ nhớ. Aspose.Email cho Java cung cấp nhiều kỹ thuật và API cho phép các nhà phát triển truy cập, xử lý và quản lý dữ liệu hộp thư một cách hiệu quả mà không gây tải quá mức cho tài nguyên hệ thống.
Sử dụng Các Phương pháp Iterable để Duyệt Thư mục và Tin nhắn
Khi lặp qua các thư mục và tin nhắn, nên ưu tiên các phương pháp trả về Iterable. Điều này giảm tải bộ nhớ và cải thiện hiệu suất.
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
for (MessageInfo messageInfo : folder.enumerateMessages()) {
// Process message
}
}
}
Sử dụng MessageInfo cho các Thuộc tính Tin nhắn Cơ bản
Nếu bạn chỉ cần chi tiết tin nhắn cơ bản, hãy sử dụng MessageInfo thay vì tải toàn bộ tin nhắn. Cách này nhanh hơn và tiêu tốn ít bộ nhớ hơn.
for (MessageInfo messageInfo : folder.enumerateMessages()) {
System.out.println("Subject: " + messageInfo.getSubject());
System.out.println("To: " + messageInfo.getDisplayTo());
System.out.println("Importance: " + messageInfo.getImportance());
System.out.println("Message Class: " + messageInfo.getMessageClass());
}
Tránh Trích xuất Toàn bộ Tin nhắn trừ khi cần thiết
Không sử dụng ExtractMessage hoặc EnumerateMapiMessages phương pháp cho tất cả tin nhắn trừ khi bạn cần mọi thuộc tính.
Thay vào đó, hãy xem xét:
a) Lấy ID Tin nhắn
Sử dụng enumerateMessagesEntryId để lấy tất cả ID tin nhắn trong một thư mục. Sau đó bạn có thể trích xuất chọn lọc các thuộc tính, tin nhắn hoặc đính kèm.
for (String id : folder.enumerateMessagesEntryId()) {
// Retrieve a property using ID (extractProperty),
// Extract a MapiMessage (extractMessage),
// Extract message attachments (extractAttachments),
// Save message to a stream (saveMessageToStream).
}
b) Trích xuất một Thuộc tính Đơn
Sử dụng ExtractProperty nếu bạn chỉ cần một thuộc tính cụ thể còn thiếu trong MessageInfo.
for (String msgId : folder.enumerateMessagesEntryId()) {
String transportMessageHeaders =
pst.extractProperty(
org.apache.commons.codec.binary.Base64.decodeBase64(msgId),
KnownPropertyList.TRANSPORT_MESSAGE_HEADERS.getTag()
).getString();
}
c) Chỉ Trích xuất Đính kèm
Nếu chỉ cần tệp đính kèm, hãy sử dụng ExtractAttachments.
for (String msgId : folder.enumerateMessagesEntryId()) {
MapiAttachmentCollection attachments = pst.extractAttachments(msgId);
}
Sử dụng Tiêu chí Tìm kiếm để Lọc Tin nhắn
Lọc tin nhắn bằng cách sử dụng tiêu chí tìm kiếm giảm số lượng tin nhắn được tải và cải thiện hiệu suất.
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder();
// Unread messages
builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ);
for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
MessageInfoCollection unread = folder.getContents(builder.getQuery());
}
}
Lưu Tin nhắn vào Stream
Thay vì trích xuất và lưu từng tin nhắn một, hãy sử dụng SaveMessageToStream để hiệu suất tốt hơn.
for (String id : folder.enumerateMessagesEntryId()) {
try (OutputStream fos = new FileOutputStream("message.msg")) {
pst.saveMessageToStream(id, fos);
}
}
Sử dụng phương pháp Bulk khi có thể
Khi nào bạn cần thêm hoặc xóa nhiều mục, ưu tiên các phương pháp bulk hơn các thao tác riêng lẻ. Điều này giảm tải và cải thiện hiệu suất.