Arbeta med stora PST‑filer
Bearbetning av stora Personal Storage Table (PST)-filer kan minska prestandan och öka minnesanvändningen. Aspose.Email för Java tillhandahåller flera tekniker och API:er som låter utvecklare komma åt, bearbeta och hantera brevlådedata effektivt utan att överbelasta systemresurserna.
Använd itererbara metoder för traversering av mappar och meddelanden
När du itererar genom mappar och meddelanden, föredra metoder som returnerar Iterable. Detta minskar minnesbelastningen och förbättrar prestandan.
try (PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
for (FolderInfo folder : pst.getRootFolder().enumerateFolders()) {
for (MessageInfo messageInfo : folder.enumerateMessages()) {
// Process message
}
}
}
Använd MessageInfo för grundläggande meddelandeegenskaper
Om du bara behöver grundläggande meddelandedetaljer, använd MessageInfo istället för att ladda hela meddelandet. Detta är snabbare och använder mindre minne.
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());
}
Undvik att extrahera hela meddelanden om det inte är nödvändigt
Använd inte ExtractMessage eller EnumerateMapiMessages metoder för alla meddelanden om du inte behöver alla egenskaper.
Överväg istället:
a) Hämta meddelande‑ID
Använd enumerateMessagesEntryId för att hämta alla meddelande‑ID i en mapp. Du kan sedan selektivt extrahera egenskaper, meddelanden eller bilagor.
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) Extrahera en enskild egenskap
Använd ExtractProperty om du bara behöver en specifik egenskap som saknas i 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) Extrahera endast bilagor
Om endast bilagor behövs, använd ExtractAttachments.
for (String msgId : folder.enumerateMessagesEntryId()) {
MapiAttachmentCollection attachments = pst.extractAttachments(msgId);
}
Använd sökkriterier för att filtrera meddelanden
Filtrera meddelanden med hjälp av sök kriterier minskar antalet meddelanden som laddas och förbättrar prestanda.
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());
}
}
Spara meddelanden till ström
Istället för att extrahera och spara meddelanden en åt gången, använd SaveMessageToStream för bättre prestanda.
for (String id : folder.enumerateMessagesEntryId()) {
try (OutputStream fos = new FileOutputStream("message.msg")) {
pst.saveMessageToStream(id, fos);
}
}
Använd bulk‑metoder när det är möjligt
När du behöver lägga till eller radera flera objekt, föredra bulk‑metoder framför individuella operationer. Detta minskar overhead och förbättrar prestanda.