Arbeta med meddelanden i en PST‑fil
Lägga till meddelanden i PST‑filer
Skapa en ny PST‑fil och lägg till undermappar visade hur man skapar en PST‑fil och lägger till en undermapp i den. Med Aspose.Email kan du lägga till meddelanden i undermappar i en PST‑fil som du har skapat eller laddat. Denna artikel lägger till två meddelanden från disk till Inkorg‑undermappen i en PST. Använd PersonalStorage och FolderInfo klasser för att lägga till meddelanden i PST‑filer. För att lägga till meddelanden i en PST‑filens Inkorg-mapp:
- Skapa en instans av klassen FolderInfo och ladda den med innehållet i Inkorg-mappen.
- Lägg till meddelanden från disk till Inkorg-mappen genom att anropa FolderInfo.addMessage() metod. FolderInfo klassen exponerar addMessages Metoden gör det möjligt att lägga till ett stort antal meddelanden till mappen, vilket minskar I/O‑operationer till disk och förbättrar prestandan. Ett komplett exempel finns nedan, i Lägga till bulkmeddelanden.
Kodsnuttarna nedan visar hur du lägger till meddelanden i en PST‑undermapp som heter Inkorg.
// 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"));
Lägga till bulkmeddelanden
Att lägga till enskilda meddelanden i en PST innebär fler I/O‑operationer till disk och kan därför sakta ner prestandan. För förbättrad prestanda kan meddelanden läggas till i PST i bulk‑läge för att minimera I/O‑operationer. addMessages(Iterable
Ladda meddelanden från disk
Följande kodavsnitt visar hur du laddar meddelanden från disk.
// 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-implementation
Följande kodavsnitt visar hur du skapar en Iterable-implementation.
// 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());
}
}
Lägga till meddelanden från en annan PST
För att lägga till meddelanden från en annan PST, använd FolderInfo.enumerateMapiMessages() metod som returnerar 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());
}
Hämta meddelandeinformation från en Outlook‑PST‑fil
I Läs Outlook PST-fil och hämta information om mappar och undermappar, vi diskuterade att ladda en Outlook‑PST‑fil och bläddra i dess mappar för att få mappnamnen och antalet meddelanden i dem. Denna artikel förklarar hur man läser alla mappar och undermappar i PST-filen och visar information om meddelanden, till exempel ämne, avsändare och mottagare. Den FolderInfo.getContents() metod används för att visa kort meddelandeinformation som ämne, avsändare, mottagare. När det gäller prestanda är detta det mest lämpliga alternativet för att erhålla grundläggande information om meddelanden. Att extrahera fullständig meddelandedata, den PersonalStorage.extractMessage() metod tillhandahålls. Outlook‑PST‑filen kan innehålla nästlade mappar. För att få meddelandeinformation från dessa, liksom de översta mapparna, använd en rekursiv metod för att läsa alla mappar. Följande kodsnutt visar hur du läser en Outlook‑PST‑fil och visar mapp‑ och meddelandeinnehållet rekursivt.
// 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);
}
}
}
Extrahera meddelanden från PST-filer
Denna artikel visar hur man läser Microsoft Outlook PST-filer och extraherar meddelanden. Meddelandena sparas sedan till disk i MSG-format. Artikeln visar också hur man extrahera ett specifikt antal meddelanden från en PST-fil. Använd en rekursiv metod för att bläddra igenom alla mappar (inklusive eventuella nästlade mappar) och anropa PersonalStorage.extractMessage() metod för att få Outlook‑meddelanden till en instans av MapiMessage klass. Efter det, anropa MapiMessage.save() metod för att spara meddelandet till antingen disk eller ström i MSG-format. Följande kodsnutt visar hur du extraherar meddelanden från en PST-fil.
// 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);
}
}
}
Spara meddelanden direkt från PST till en ström
För att spara meddelanden från en PST-fil direkt till en ström, utan att extrahera MsgInfo för meddelanden, använd saveMessageToStream() metod. Följande kodsnutt visar hur du sparar meddelanden direkt från PST till en ström.
// 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);
}
}
}
Extrahera n antal meddelanden från en PST-fil
Följande kodsnutt visar hur du extraherar ett givet antal meddelanden från en PST. Ange helt enkelt index för det första meddelandet och det totala antalet meddelanden som ska extraheras.
// 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);
Hämta totalt antal objekt från en PST-fil
Aspose.Email tillhandahåller GetTotalItemsCount() metod för PersonalStorage.Store egenskap. Den returnerar det totala antalet meddelandeobjekt som finns i PST.
Följande kodexempel visar hur du hämtar det totala antalet objekt (meddelanden, möten, kontakter etc.) som lagras i PST-filen:
try (PersonalStorage pst = PersonalStorage.fromFile("my.pst", false)) {
int count = pst.getStore().getTotalItemsCount();
}
Radera objekt från PST-filer
Lägg till meddelanden i PST-filer visade hur man lägger till meddelanden i PST-filer. Det är naturligtvis också möjligt att radera objekt (innehåll) från en PST-fil och det kan också vara önskvärt att radera meddelanden i bulk. Objekt från en PST-fil kan raderas med hjälp av FolderInfo.deleteChildItem() metod. API:et tillhandahåller också FolderInfo.deleteChildItems() metod för att radera objekt i bulk från PST-filen.
Radera meddelanden från PST-filer
Denna artikel visar hur man använder FolderInfo klass för att komma åt specifika mappar i en PST-fil. För att ta bort meddelanden från den skickade undermappen i en tidigare laddad eller skapad PST-fil:
- Skapa en instans av FolderInfo klass och ladda den med innehållet i den skickade undermappen.
- Ta bort meddelanden från Skickat‑mappen genom att anropa FolderInfo.deleteChildItem() metod och skickar MessageInfo.EntryId som en parameter. Följande kodsnutt visar hur du tar bort meddelanden från en PST-fils Skickat‑undermapp.
// 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");
}
}
Radera mappar från PST-filer
Du kan radera en PST-mapp genom att flytta den till mappen Borttagna objekt.
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);
}
Fördelen med denna metod är att den raderade mappen enkelt kan återställas.
FolderInfo someFolder = deletedItemsFolder.getSubFolder("Some folder");
pst.moveItem(someFolder, pst.getRootFolder());
Du kan också permanent ta bort en mapp från mappen Borttagna objekt, om så behövs.
deletedItemsFolder.deleteChildItem(emptyFolder.getEntryId());
Den deleteChildItem() metod kan användas för vilken mapp som helst om du vill omedelbart och permanent radera en undermapp, utan att gå via mappen Borttagna objekt.
FolderInfo someFolder = pst.getRootFolder().getSubFolder("Some folder");
pst.getRootFolder().deleteChildItem(someFolder.getEntryId());
Radera objekt i bulk från en PST-fil
Aspose.Email API kan användas för att radera objekt i bulk från en PST-fil. Detta uppnås med hjälp av deleteChildItems() metod som accepterar en lista med Entry‑ID‑objekt som refererar till objekten som ska raderas. Följande kodsnutt visar hur du tar bort objekt i bulk från en PST-fil.
// 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);
}
Enumerera och återställ mjukt raderade meddelanden från PST
Det är möjligt att hämta permanent raderade meddelanden med Aspose.Email för Java. Dess API gör det möjligt att enumerera mjukt raderade meddelanden i PST-filer. Mjukt raderade objekt är meddelanden som har raderats två gånger – först flyttade till mappen Borttagna objekt och sedan borttagna därifrån. Dessa meddelanden är fortfarande återställningsbara, och Aspose.Email tillhandahåller ett bekvämt sätt att komma åt dem. Den PersonalStorage.findAndEnumerateSoftDeletedItems() metod returnerar en samling av RestoredItemEntry objekt. Varje post innehåller:
- MapiMessage item — det återställda meddelandet.
- String FolderId - identifieraren för den mapp där meddelandet ursprungligen tillhörde.
Följande kodexempel visar hur du enumererar mjukt raderade (återställningsbara) e‑postobjekt i PST-filer:
// 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("-----------------------------------");
}
}
Sök efter meddelanden och mappar i en PST efter kriterium
Personal Storage (PST)-filer kan innehålla en enorm mängd data och sökning efter data som uppfyller specifika kriterier i så stora filer kräver flera kontrollpunkter i koden för att filtrera informationen. Med PersonalStorageQueryBuilder klass, Aspose.Email möjliggör att söka efter specifika poster i en PST baserat på ett specificerat sökkriterium. En PST kan sökas efter meddelanden baserat på sökparametrar såsom avsändare, mottagare, ämne, meddelandebetydelse, närvaro av bilagor, meddelandestorlek och till och med meddelande‑ID. Den PersonalStorageQueryBuilder kan också användas för att söka efter undermappar.
Sökning efter meddelanden och mappar i PST
Följande kodsnutt visar hur du använder PersonalStorageQueryBuilder klass för att söka efter innehåll i en PST baserat på olika sökkriterier. Till exempel visar den sökning i en PST baserat på:
- Meddelandebetydelse.
- Meddelandeklass.
- Närvaro av bilagor.
- Meddelandestorlek.
- Meddelandedatum.
- Olästa meddelanden.
- Olästa meddelanden med bilagor, och
- mappar med ett specifikt undermappnamn.
// 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());
}
Sökning efter en sträng i PST med parametern för att ignorera skiftläge
Följande kodsnutt visar hur du söker efter en sträng i PST med parametern för att ignorera skiftläge.
// 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());
}
Sökning efter meddelandeämnen med flera nyckelord i en PST-fil
Du kan använda MailQueryBuilder.or metod för att hitta meddelanden med ett ämne som innehåller minst ett av de specificerade orden som visas nedan:
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());
}
}
Paginerad hämtning av PST-mappinnehåll
Förbättra din applikations prestanda och kontroll när du navigerar i stora mappar. Hämta mappinnehåll på ett paginerat sätt med Aspose.Email‑överladdning av getContents metod. Denna metod - FolderInfo.getContents(MailQuery query, int startIndex, int count) - hämtar en delmängd av meddelanden som matchar den specificerade frågan, med start från ett givet index och begränsat av ett antal. Följande kodexempel visar paginerad hämtning och bearbetning av filtrerade meddelanden från en PST-mapp:
// 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());
}
}
}
Flytta objekt till andra mappar i PST-filen
Aspose.Email möjliggör att flytta objekt från en källmapp till en annan mapp i samma Personal Storage (PST)-fil. Detta inkluderar:
- Flyttar en specificerad mapp till en ny föräldramapp.
- Flyttar ett specificerat meddelande till en ny mapp.
- Flyttar innehållet till en ny mapp.
- Flyttar undermappar till en ny föräldramapp.
Följande kodsnutt visar hur du flyttar objekt som meddelanden och mappar från en källmapp till en annan mapp i samma PST-fil.
// 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);
}
Uppdatera meddelandeegenskaper i en PST-fil
Ibland är det nödvändigt att uppdatera vissa egenskaper i meddelanden, såsom att ändra ämnet, markera meddelandeviktighet och liknande. Att uppdatera ett meddelande i en PST‑fil med sådana ändringar i meddelandets egenskaper kan uppnås med hjälp av FolderInfo.changeMessages metod. Denna artikel visar hur man uppdaterar meddelanden i bulk i en PST‑fil för förändringar i egenskaperna. Följande kodsnutt visar hur du uppdaterar egenskaper för meddelanden i bulk‑läge för flera meddelanden i en PST‑fil.
// 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);
Uppdatera anpassade egenskaper i en PST‑fil
Ibland är det nödvändigt att markera objekt som har bearbetats i PST‑filen. Aspose.Email‑API möjliggör detta med hjälp av MapiProperty och MapiNamedProperty. Följande metoder är användbara för att uppnå detta.
- constructor MapiNamedProperty(long propertyTag, String nameIdentifier, UUID propertyGuid, byte[] propertyValue)
- constructor MapiNamedProperty(long propertyTag, long nameIdentifier, UUID propertyGuid, byte[] propertyValue)
- FolderInfo.changeMessages(MapiPropertyCollection updatedProperties) - ändrar alla meddelanden i mappen
- PersonalStorage.changeMessage(String entryId, MapiPropertyCollection updatedProperties) - ändra meddelandeegenskaper
// 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;
}
Extrahera bilagor utan att extrahera hela meddelandet
Aspose.Email‑API kan användas för att extrahera bilagor från PST‑meddelanden utan att först extrahera hela meddelandet. Den ExtractAttachments metod för PersonalStorage kan användas för att göra detta. Följande kodsnutt visar hur du extraherar bilagor utan att extrahera hela meddelandet.
// 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());
}
}
}
}
}
}
Lägga till filer i PST
Microsoft Outlooks huvudfunktion är att hantera e‑post, kalendrar, uppgifter, kontakter och journalanteckningar. Dessutom kan filer läggas till i en PST‑mapp och den resulterande PST‑filen håller reda på de tillagda dokumenten. Aspose.Email erbjuder möjligheten att lägga till filer i en mapp på samma sätt som med meddelanden, kontakter, uppgifter och journalanteckningar i PST. Följande kodsnutt visar hur du lägger till dokument i en PST‑mapp med hjälp av Aspose.Email.
// 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);
}