Práce se zprávami v souboru PST
Přidávání zpráv do souborů PST
Vytvořte nový soubor PST a přidejte podadresáře ukázal, jak vytvořit soubor PST a přidat do něj podadresář. S Aspose.Email můžete přidávat zprávy do podadresářů souboru PST, který jste vytvořili nebo načetli. Tento článek přidává dvě zprávy z disku do podadresáře Inbox v PST. Použijte PersonalStorage a FolderInfo třídy pro přidávání zpráv do souborů PST. Pro přidání zpráv do složky Inbox souboru PST:
- Vytvořte instanci třídy FolderInfo a načtěte do ní obsah složky Inbox.
- Přidejte zprávy z disku do složky Inbox voláním FolderInfo.addMessage() metoda. FolderInfo třída vystavuje addMessages metoda, která umožňuje přidat velké množství zpráv do složky, čímž snižuje operace I/O na disk a zlepšuje výkon. Kompletní příklad je uveden níže v Hromadné přidávání zpráv.
Níže uvedené úryvky kódu ukazují, jak přidat zprávy do podadresáře PST nazvaného 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"));
Hromadné přidávání zpráv
Přidávání jednotlivých zpráv do PST implikuje více I/O operací na disk a může tak zpomalit výkon. Pro lepší výkon lze zprávy přidávat do PST hromadně, aby se minimalizovaly I/O operace. The addMessages(Iterable
Načítání zpráv z disku
Následující úryvek kódu ukazuje, jak načíst zprávy z disku.
// 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());
}
Implementace Iterable
Následující úryvek kódu vám ukazuje, jak vytvořit implementaci 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());
}
}
Přidávání zpráv z jiného PST
Pro přidání zpráv z jiného PST použijte FolderInfo.enumerateMapiMessages() metoda, která vrací 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());
}
Získání informací o zprávách z Outlook PST souboru
V Načtení souboru Outlook PST a získání informací o složkách a podsložkách, diskutovali jsme o načtení souboru Outlook PST a procházení jeho složek za účelem získání názvů složek a počtu zpráv v nich. Tento článek vysvětluje, jak číst všechny složky a podadresáře v souboru PST a zobrazit informace o zprávách, např. předmět, odesílatele a příjemce. FolderInfo.getContents() metoda se používá k zobrazení stručné informace o zprávě jako předmět, odesílatel, příjemci. Co se týče výkonu, je to nejvhodnější možnost pro získání základních informací o zprávách. Pro extrahovat úplná data zprávy, PersonalStorage.extractMessage() je poskytnuta metoda. Soubor Outlook PST může obsahovat vnořené složky. Pro získání informací o zprávách z nich i z hlavních složek použijte rekurzivní metodu pro čtení všech složek. Níže uvedený úryvek kódu ukazuje, jak načíst soubor Outlook PST a rekurzivně zobrazit obsah složek a zpráv.
// 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);
}
}
}
Extrahování zpráv ze souborů PST
Tento článek ukazuje, jak číst soubory Microsoft Outlook PST a extrahovat zprávy. Zprávy jsou pak uloženy na disk ve formátu MSG. Článek také ukazuje, jak extrahovat konkrétní počet zpráv ze souboru PST. Použijte rekurzivní metodu k procházení všech složek (včetně vnořených) a zavolejte PersonalStorage.extractMessage() metodu pro získání Outlook zpráv do instance MapiMessage třída. Poté zavolejte MapiMessage.save() metoda pro uložení zprávy buď na disk, nebo do proudu ve formátu MSG. Níže uvedený úryvek kódu ukazuje, jak extrahovat zprávy ze souboru 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);
}
}
}
Ukládání zpráv přímo z PST do proudu
Pro uložení zpráv ze souboru PST přímo do proudu, bez extrakce MsgInfo pro zprávy, použijte saveMessageToStream() metoda. Níže uvedený úryvek kódu ukazuje, jak uložit zprávy přímo z PST do proudu.
// 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);
}
}
}
Extrahování n počtu zpráv ze souboru PST
Níže uvedený úryvek kódu ukazuje, jak extrahovat daný počet zpráv ze souboru PST. Stačí zadat index první zprávy a celkový počet zpráv, které mají být extrahovány.
// 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);
Získání celkového počtu položek ze souboru PST
Aspose.Email poskytuje GetTotalItemsCount() metoda třídy PersonalStorage.Store vlastnost. Vrací celkový počet zpráv obsažených v PST.
Níže uvedený ukázkový kód ukazuje, jak získat celkový počet položek (zpráv, schůzek, kontaktů atd.) uložených v souboru PST:
try (PersonalStorage pst = PersonalStorage.fromFile("my.pst", false)) {
int count = pst.getStore().getTotalItemsCount();
}
Mazání položek ze souborů PST
Add Messages to PST Files ukázalo, jak přidávat zprávy do souborů PST. Samozřejmě je také možné mazat položky (obsah) ze souboru PST a může být žádoucí mazat zprávy hromadně. Položky ze souboru PST lze smazat pomocí FolderInfo.deleteChildItem() metoda. API také poskytuje FolderInfo.deleteChildItems() metoda pro hromadné mazání položek ze souboru PST.
Mazání zpráv ze souborů PST
Tento článek ukazuje, jak použít FolderInfo třída pro přístup k určitým složkám v souboru PST. Pro smazání zpráv z podadresáře Odeslané v dříve načteném nebo vytvořeném souboru PST:
- Vytvořte instanci FolderInfo třídy a načíst ji s obsahem podadresáře Odeslané.
- Smazat zprávy ze složky Odeslané voláním FolderInfo.deleteChildItem() metoda a předání MessageInfo.EntryId jako parametr. Níže uvedený úryvek kódu ukazuje, jak smazat zprávy z podadresáře Odeslané v souboru 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");
}
}
Mazání složek ze souborů PST
Složku PST můžete smazat její přesunem do složky Smazané položky.
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);
}
Výhodou této metody je, že smazaná složka může být snadno obnovena.
FolderInfo someFolder = deletedItemsFolder.getSubFolder("Some folder");
pst.moveItem(someFolder, pst.getRootFolder());
V případě potřeby můžete také trvale odstranit složku ze složky Smazané položky.
deletedItemsFolder.deleteChildItem(emptyFolder.getEntryId());
The deleteChildItem() metoda může být použita pro jakékoli složky, pokud chcete okamžitě a trvale smazat podadresář, obcházejíc složku Smazané položky.
FolderInfo someFolder = pst.getRootFolder().getSubFolder("Some folder");
pst.getRootFolder().deleteChildItem(someFolder.getEntryId());
Hromadné mazání položek ze souboru PST
API Aspose.Email lze použít k hromadnému mazání položek ze souboru PST. To je realizováno pomocí deleteChildItems() metoda, která přijímá seznam položek Entry ID odkazujících na položky k odstranění. Níže uvedený úryvek kódu ukazuje, jak hromadně mazat položky v souboru 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);
}
Vyjmenování a obnovení soft‑smazaných zpráv z PST
Je možné získat trvale smazané zprávy pomocí Aspose.Email pro Javu. Jeho API umožňuje vyjmenovat soft‑smazané zprávy v souborech PST. Soft‑smazané položky jsou zprávy, které byly smazány dvakrát – nejprve přesunuty do složky Smazané položky a poté odtud odstraněny. Tyto zprávy jsou stále obnovitelné a Aspose.Email poskytuje pohodlný způsob, jak k nim přistupovat. PersonalStorage.findAndEnumerateSoftDeletedItems() metoda vrací kolekci RestoredItemEntry objekty. Každý záznam obsahuje:
- MapiMessage item — obnovená zpráva.
- String FolderId - identifikátor složky, do které zpráva původně patřila.
Níže uvedený ukázkový kód demonstruje, jak vyjmenovat soft‑smazané (obnovitelné) e‑mailové položky v souborech 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("-----------------------------------");
}
}
Vyhledávání zpráv a složek v PST podle kritéria
Soubory Personal Storage (PST) mohou obsahovat obrovské množství dat a vyhledávání dat, která splňují konkrétní kritéria v tak velkých souborech, vyžaduje zahrnutí více kontrolních bodů v kódu pro filtrování informací. S PersonalStorageQueryBuilder třída, Aspose.Email umožňuje vyhledávat konkrétní záznamy v PST na základě určených kritérií vyhledávání. PST lze prohledávat zprávy podle parametrů jako odesílatel, příjemce, předmět, důležitost zprávy, přítomnost příloh, velikost zprávy a dokonce ID zprávy. PersonalStorageQueryBuilder může být také použito k vyhledávání podadresářů.
Vyhledávání zpráv a složek v PST
Níže uvedený úryvek kódu ukazuje, jak použít PersonalStorageQueryBuilder třída pro vyhledávání obsahu v PST na základě různých kritérií vyhledávání. Například ukazuje vyhledávání PST podle:
- Důležitost zprávy.
- Třída zprávy.
- Přítomnost příloh.
- Velikost zprávy.
- Datum zprávy.
- Nepřečtené zprávy.
- nepřečtené zprávy s přílohami a
- složky s konkrétním názvem podadresáře.
// 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());
}
Vyhledávání řetězce v PST s parametrem ignorování velikosti písmen
Níže uvedený úryvek kódu ukazuje, jak vyhledat řetězec v PST s parametrem ignorování velikosti písmen.
// 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());
}
Vyhledávání předmětů zpráv pomocí více klíčových slov v souboru PST
Můžete použít MailQueryBuilder.or metoda pro vyhledání zpráv s předmětem obsahujícím alespoň jedno ze zadaných slov, jak je uvedeno níže:
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());
}
}
Stránkované načítání obsahu složky PST
Zlepšete výkon své aplikace a kontrolu při procházení velkých složek. Načtěte obsah složky stránkovaným způsobem pomocí přetížení metody Aspose.Email getContents metoda. Tato metoda - FolderInfo.getContents(MailQuery query, int startIndex, int count) - získá podmnožinu zpráv odpovídajících zadanému dotazu, počínaje daným indexem a omezenou počtem. Níže uvedený ukázkový kód demonstruje stránkované načítání a zpracování filtrovaných zpráv ze složky 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());
}
}
}
Přesun položek do jiných složek souboru PST
Aspose.Email umožňuje přesunout položky ze zdrojové složky do jiné složky ve stejném souboru Personal Storage (PST). To zahrnuje:
- Přesun konkrétní složky do nové nadřazené složky.
- Přesun konkrétní zprávy do nové složky.
- Přesun obsahu do nové složky.
- Přesun podadresářů do nové nadřazené složky.
Níže uvedený úryvek kódu ukazuje, jak přesunout položky, jako jsou zprávy a složky, ze zdrojové složky do jiné složky ve stejném souboru 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);
}
Aktualizace vlastností zpráv v souboru PST
Někdy je potřeba aktualizovat určité vlastnosti zpráv, jako změna předmětu, označení důležitosti zprávy a podobně. Aktualizace zprávy v PST souboru s takovými změnami ve vlastnostech zprávy může být provedena pomocí FolderInfo.changeMessages metoda. Tento článek ukazuje, jak hromadně aktualizovat zprávy v souboru PST kvůli změnám vlastností. Následující úryvek kódu ukazuje, jak aktualizovat vlastnosti zpráv v hromadném režimu pro více zpráv v souboru 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);
Aktualizace vlastních vlastností v souboru PST
Někdy je potřeba označit položky, které jsou v souboru PST zpracovány. API Aspose.Email umožňuje dosáhnout toho pomocí MapiProperty a MapiNamedProperty. Následující metody jsou při tom užitečné.
- constructor MapiNamedProperty(long propertyTag, String nameIdentifier, UUID propertyGuid, byte[] propertyValue)
- constructor MapiNamedProperty(long propertyTag, long nameIdentifier, UUID propertyGuid, byte[] propertyValue)
- FolderInfo.changeMessages(MapiPropertyCollection updatedProperties) - mění všechny zprávy ve složce
- PersonalStorage.changeMessage(String entryId, MapiPropertyCollection updatedProperties) - změnit vlastnosti zprávy
// 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;
}
Extrahovat přílohy bez extrakce celé zprávy
API Aspose.Email lze použít k extrakci příloh ze zpráv PST, aniž by nejprve byla extrahována celá zpráva. ExtractAttachments metoda PersonalStorage může být použito k tomuto účelu. Následující úryvek kódu ukazuje, jak extrahovat přílohy bez extrakce celé zprávy.
// 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());
}
}
}
}
}
}
Přidávání souborů do PST
Klíčová funkčnost Microsoft Outlook zahrnuje správu e‑mailů, kalendářů, úkolů, kontaktů a deníkových záznamů. Navíc lze do složky PST přidávat soubory a výsledný PST uchovává záznamy o přidaných dokumentech. Aspose.Email poskytuje možnost přidávat soubory do složky stejným způsobem, jako přidávání zpráv, kontaktů, úkolů a deníkových záznamů do PST. Následující úryvek kódu ukazuje, jak přidat dokumenty do složky PST pomocí 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);
}