Lavorare con i messaggi in un file PST
Aggiunta di messaggi ai file PST
Crea un nuovo file PST e aggiungi sottocartelle ha mostrato come creare un file PST e aggiungere una sottocartella. Con Aspose.Email è possibile aggiungere messaggi alle sottocartelle di un file PST che hai creato o caricato. Questo articolo aggiunge due messaggi dal disco alla sottocartella Inbox di un PST. Usa il PersonalStorage e FolderInfo classi per aggiungere messaggi ai file PST. Per aggiungere messaggi alla cartella Inbox di un file PST:
- Crea un’istanza della classe FolderInfo e caricala con il contenuto della cartella Inbox.
- Aggiungi messaggi dal disco alla cartella Inbox chiamando il FolderInfo.addMessage() metodo. Il FolderInfo la classe espone il addMessages Metodo che consente di aggiungere un gran numero di messaggi alla cartella, riducendo le operazioni I/O al disco e migliorando le prestazioni. Un esempio completo può essere trovato di seguito, in Aggiunta di messaggi in batch.
Gli snippet di codice seguenti mostrano come aggiungere messaggi a una sottocartella PST chiamata Inbox.
// 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"));
Aggiunta di messaggi in batch
Aggiungere messaggi individuali a un PST implica più operazioni I/O al disco e quindi può rallentare le prestazioni. Per migliorare le prestazioni, i messaggi possono essere aggiunti al PST in modalità batch per ridurre al minimo le operazioni I/O. Il addMessages(Iterable
Caricamento dei messaggi dal disco
Il seguente snippet di codice mostra come caricare i messaggi dal disco.
// 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());
}
Implementazione Iterable
Il seguente snippet di codice mostra come creare un’implementazione Iterable.
// 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());
}
}
Aggiunta di messaggi da un altro PST
Per aggiungere messaggi da un altro PST, usa il FolderInfo.enumerateMapiMessages() metodo che restituisce 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());
}
Ottieni informazioni sui messaggi da un file PST di Outlook
In Leggi il file Outlook PST e ottieni informazioni su cartelle e sottocartelle, abbiamo discusso del caricamento di un file PST di Outlook e della navigazione delle sue cartelle per ottenere i nomi delle cartelle e il numero di messaggi in esse. Questo articolo spiega come leggere tutte le cartelle e sottocartelle nel file PST e mostrare le informazioni sui messaggi, ad esempio oggetto, mittente e destinatari. Il FolderInfo.getContents() il metodo è usato per visualizzare informazioni sintetiche del messaggio come oggetto, mittente, destinatari. In termini di prestazioni, questa è l’opzione più adatta per ottenere informazioni primarie sui messaggi. Per extract dati completi del messaggio, il PersonalStorage.extractMessage() viene fornito il metodo. Il file PST di Outlook può contenere cartelle nidificate. Per ottenere le informazioni sui messaggi da queste e dalle cartelle di livello superiore, usa un metodo ricorsivo per leggere tutte le cartelle. Il seguente frammento di codice mostra come leggere un file PST di Outlook e visualizzare ricorsivamente il contenuto delle cartelle e dei messaggi.
// 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);
}
}
}
Estrazione di messaggi da file PST
Questo articolo mostra come leggere i file PST di Microsoft Outlook e estrarre i messaggi. I messaggi vengono poi salvati su disco in formato MSG. L’articolo mostra anche come estrarre un numero specifico di messaggi da un file PST. Usa un metodo ricorsivo per esplorare tutte le cartelle (incluse quelle nidificate) e chiama il PersonalStorage.extractMessage() metodo per ottenere i messaggi Outlook in un’istanza di MapiMessage classe. Dopo, chiama il MapiMessage.save() metodo per salvare il messaggio su disco o stream in formato MSG. Il seguente frammento di codice mostra come estrarre i messaggi da un file PST.
// 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);
}
}
}
Salvataggio diretto dei messaggi da PST a stream
Per salvare i messaggi da un file PST direttamente su stream, senza estrarre il MsgInfo per i messaggi, usa il saveMessageToStream() metodo. Il seguente frammento di codice mostra come salvare i messaggi direttamente da PST a stream.
// 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);
}
}
}
Estrazione di n messaggi da un file PST
Il seguente frammento di codice mostra come estrarre un determinato numero di messaggi da un PST. Basta fornire l’indice del primo messaggio e il numero totale di messaggi da estrarre.
// 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);
Ottieni il numero totale di elementi da un file PST
Aspose.Email fornisce il GetTotalItemsCount() metodo del PersonalStorage.Store proprietà. Restituisce il numero totale di messaggi contenuti nel PST.
Il seguente esempio di codice mostra come recuperare il conteggio totale degli elementi (messaggi, appuntamenti, contatti, ecc.) archiviati nel file PST:
try (PersonalStorage pst = PersonalStorage.fromFile("my.pst", false)) {
int count = pst.getStore().getTotalItemsCount();
}
Elimina elementi da file PST
Add Messages to PST Files ha mostrato come aggiungere messaggi ai file PST. È, naturalmente, anche possibile eliminare elementi (contenuti) da un file PST e può essere desiderabile eliminare messaggi in blocco. Gli elementi di un file PST possono essere eliminati usando il FolderInfo.deleteChildItem() metodo. L’API fornisce anche FolderInfo.deleteChildItems() metodo per eliminare elementi in blocco dal file PST.
Eliminazione di messaggi da file PST
Questo articolo mostra come usare il FolderInfo classe per accedere a cartelle specifiche in un file PST. Per eliminare i messaggi dalla sottocartella Inviati di un file PST precedentemente caricato o creato:
- Crea un’istanza di FolderInfo classe e caricala con i contenuti della sottocartella Inviati.
- Elimina i messaggi dalla cartella Inviati chiamando il FolderInfo.deleteChildItem() metodo e passando il MessageInfo.EntryId come parametro. Il seguente frammento di codice mostra come eliminare messaggi dalla sottocartella Inviati di un file PST.
// 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");
}
}
Eliminazione di cartelle da file PST
Puoi eliminare una cartella PST spostandola nella cartella Elementi eliminati.
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);
}
Il vantaggio di questo metodo è che la cartella eliminata può essere facilmente recuperata.
FolderInfo someFolder = deletedItemsFolder.getSubFolder("Some folder");
pst.moveItem(someFolder, pst.getRootFolder());
Puoi anche rimuovere definitivamente una cartella dalla cartella Elementi eliminati, se necessario.
deletedItemsFolder.deleteChildItem(emptyFolder.getEntryId());
Il deleteChildItem() il metodo può essere usato per qualsiasi cartella se si desidera eliminare immediatamente e definitivamente una sottocartella, bypassando la cartella Elementi eliminati.
FolderInfo someFolder = pst.getRootFolder().getSubFolder("Some folder");
pst.getRootFolder().deleteChildItem(someFolder.getEntryId());
Elimina elementi in blocco da un file PST
L’API Aspose.Email può essere usata per eliminare elementi in blocco da un file PST. Questo è ottenuto usando il deleteChildItems() metodo che accetta un elenco di elementi Entry ID riferiti agli oggetti da eliminare. Il seguente frammento di codice mostra come eliminare elementi in blocco da un file PST.
// 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);
}
Enumerare e recuperare messaggi soft-deleted da PST
È possibile recuperare messaggi eliminati definitivamente con Aspose.Email per Java. La sua API consente di enumerare i messaggi eliminati (soft-deleted) nei file PST. Gli elementi soft-deleted sono messaggi che sono stati cancellati due volte - prima spostati nella cartella Elementi eliminati e poi rimossi da essa. Questi messaggi sono ancora recuperabili, e Aspose.Email fornisce un modo conveniente per accedervi. Il PersonalStorage.findAndEnumerateSoftDeletedItems() il metodo restituisce una collezione di RestoredItemEntry oggetti. Ogni voce contiene:
- MapiMessage item — il messaggio recuperato.
- String FolderId - l’identificatore della cartella a cui il messaggio apparteneva originariamente.
Il seguente esempio di codice dimostra come enumerare gli elementi email eliminati (recuperabili) nei file PST:
// 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("-----------------------------------");
}
}
Cerca messaggi e cartelle in un PST per criterio
I file di archiviazione personale (PST) possono contenere una grande quantità di dati e la ricerca di dati che soddisfano criteri specifici in file così grandi richiede l’inserimento di più punti di controllo nel codice per filtrare le informazioni. Con il PersonalStorageQueryBuilder classe, Aspose.Email consente di cercare record specifici in un PST basandosi su criteri di ricerca specificati. Un PST può essere cercato per messaggi in base a parametri di ricerca quali mittente, destinatario, oggetto, importanza del messaggio, presenza di allegati, dimensione del messaggio e persino ID del messaggio. Il PersonalStorageQueryBuilder può anche essere usato per cercare sottocartelle.
Ricerca di messaggi e cartelle in PST
Il seguente frammento di codice mostra come utilizzare il PersonalStorageQueryBuilder classe per cercare contenuti in un PST basandosi su diversi criteri di ricerca. Ad esempio, mostra la ricerca di un PST basata su:
- Importanza del messaggio.
- Classe del messaggio.
- Presenza di allegati.
- Dimensione del messaggio.
- Data del messaggio.
- Messaggi non letti.
- Messaggi non letti con allegati, e
- cartelle con nome specifico di sottocartella.
// 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());
}
Ricerca di una stringa in PST con il parametro Ignora maiuscole/minuscole
Il seguente frammento di codice mostra come cercare una stringa in un PST con il parametro di ignorare le maiuscole.
// 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());
}
Ricerca degli oggetti dei messaggi per più parole chiave in un file PST
Puoi usare MailQueryBuilder.or metodo per trovare messaggi con un oggetto contenente almeno una delle parole specificate come mostrato di seguito:
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());
}
}
Recupero paginato dei contenuti della cartella PST
Migliora le prestazioni della tua applicazione e il controllo durante la navigazione di cartelle di grandi dimensioni. Recupera il contenuto delle cartelle in modo paginato utilizzando la sovraccarico di Aspose.Email del getContents metodo. Questo metodo - FolderInfo.getContents(MailQuery query, int startIndex, int count) - recupera un sottoinsieme di messaggi che corrispondono alla query specificata, a partire da un indice dato e limitato da un conteggio. Il seguente esempio di codice dimostra il recupero paginato e l’elaborazione di messaggi filtrati da una cartella PST:
// 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());
}
}
}
Spostare gli elementi in altre cartelle del file PST
Aspose.Email consente di spostare elementi da una cartella di origine a un’altra cartella nello stesso file di archiviazione personale (PST). Questo include:
- Spostamento di una cartella specificata in una nuova cartella principale.
- Spostamento di un messaggio specificato in una nuova cartella.
- Spostamento del contenuto in una nuova cartella.
- Spostamento di sottocartelle in una nuova cartella principale.
Il seguente frammento di codice mostra come spostare elementi come messaggi e cartelle da una cartella di origine a un’altra cartella nello stesso file PST.
// 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);
}
Aggiornamento delle proprietà del messaggio in un file PST
Talvolta è necessario aggiornare alcune proprietà dei messaggi come modificare l’oggetto, contrassegnare l’importanza del messaggio e altre similari. Aggiornare un messaggio in un file PST, con tali modifiche alle proprietà del messaggio, può essere fatto usando il FolderInfo.changeMessages metodo. Questo articolo mostra come aggiornare i messaggi in blocco in un file PST per modifiche alle proprietà. Il seguente frammento di codice mostra come aggiornare le proprietà dei messaggi in modalità bulk per più messaggi in un file PST.
// 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);
Aggiornamento delle proprietà personalizzate in un file PST
Talvolta è necessario contrassegnare gli elementi processati all’interno del file PST. L’API di Aspose.Email consente di farlo usando MapiProperty e MapiNamedProperty. I seguenti metodi sono utili per raggiungere questo scopo.
- constructor MapiNamedProperty(long propertyTag, String nameIdentifier, UUID propertyGuid, byte[] propertyValue)
- constructor MapiNamedProperty(long propertyTag, long nameIdentifier, UUID propertyGuid, byte[] propertyValue)
- FolderInfo.changeMessages(MapiPropertyCollection updatedProperties) - cambia tutti i messaggi nella cartella
- PersonalStorage.changeMessage(String entryId, MapiPropertyCollection updatedProperties) - modifica le proprietà del messaggio
// 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;
}
Estrai allegati senza estrarre l’intero messaggio
L’API di Aspose.Email può essere usata per estrarre gli allegati dai messaggi PST senza estrarre prima l’intero messaggio. Il ExtractAttachments metodo di PersonalStorage può essere usato per farlo. Il seguente frammento di codice mostra come estrarre gli allegati senza estrarre l’intero messaggio.
// 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());
}
}
}
}
}
}
Aggiunta di file al PST
La funzionalità chiave di Microsoft Outlook è gestire email, calendari, attività, contatti e voci di diario. Inoltre, è possibile aggiungere file a una cartella PST e il PST risultante conserva la traccia dei documenti aggiunti. Aspose.Email offre la possibilità di aggiungere file a una cartella allo stesso modo di aggiungere messaggi, contatti, attività e voci di diario al PST. Il seguente frammento di codice mostra come aggiungere documenti a una cartella PST usando 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);
}