Čtení a konverze souborů Outlook
Práce se soubory OST
Aspose.Email pro .NET poskytuje API pro čtení souborů Microsoft Outlook OST. Můžete načíst soubor OST z disku nebo proudu do instance Aspose.Email.Outlook.Pst.PersonalStorage třída pro přístup k jejímu obsahu, jako jsou složky, podsložky a zprávy. Microsoft Outlook vytváří soubor PST pro ukládání e‑mailů při použití POP3 nebo IMAP serverů. Naopak vytváří soubor OST, když je mailovým serverem Microsoft Exchange. Soubory OST také podporují větší velikosti než soubory PST.
Číst soubory OST
Proces čtení souboru OST pomocí Aspose.Email je zcela stejný jako čtení souboru PST. Stejný kód může číst jak PST, tak OST soubory: stačí předat správný název souboru do PersonalStorage.FromFile() metoda. Následující úryvek kódu ukazuje, jak číst soubory OST.
Převést OST na PST
Vyzkoušejte to!
Konvertujte e‑maily a archiv zpráv online zdarma s Aspose.Email konverzní aplikace.
Pro provádění dalších operací se soubory OST se prosím podívejte na následující stránky:
- Čtení souborů PST a získání informací
- Získání informací o zprávách ze souboru Outlook PST
- Extrahování zpráv ze souboru Outlook PST a uložení na disk nebo stream ve formátu MSG
- Přístup k informacím o kontaktech ze souboru Outlook PST a uložení na disk ve formátu MSG
Převést PST na OST
Konverze z PST na OST není v Aspose.Email podporována, protože OST je vždy vytvářen Outlookem při přidání účtu a synchronizaci s poštovním serverem. Rozdíl mezi soubory PST a OST spočívá v tom, že PST je dostupný jen lokálně. Obsah OST je také dostupný na e‑mailovém serveru. Proto není nutné konvertovat PST na OST pro lokální použití. Přesto můžete importovat PST do existujícího účtu pomocí průvodce Import/Export v Outlooku.
OLM je specifický formát souboru používaný Microsoft Outlookem pro uložení místních dat, jako jsou e‑maily, přílohy, poznámky, kalendářové údaje, kontakty, úkoly, historie a další. Soubory OLM jsou kompatibilní jen s Outlookem pro Mac a nelze je otevřít ani přistupovat k nim pomocí Outlooku pro Windows, který místo toho používá formát PST.
Práce se soubory OLM
Otevření souborů OLM
Soubory ve formátu OLM lze otevřít dvěma způsoby:
- použitím konstruktoru
- použitím statické metody FromFile
Mezi těmito metodami existují rozdíly v chování. Viz sekce níže.
Použití konstruktoru
Pro otevření souboru zavolejte konstruktor třídy OlmStorage třídu a předat jako argument úplný název souboru nebo proud:
var fileName = "MyStorage.olm";
var olm = new OlmStorage(fileName);
Použití statické metody FromFile
Pro otevření souboru použijte statickou metodu FromFile a jako argument předáte úplný název souboru nebo stream:
var fileName = "MyStorage.olm";
var olm = OlmStorage.FromFile(fileName);
Načtení složek
Chcete-li přistupovat ke struktuře adresářů souboru OLM, vytvořte instanci OlmStorage třídy pomocí jejího konstruktoru a předjte cestu k souboru. Jakmile je soubor otevřen, přistupte k jeho struktuře adresářů pomocí FolderHierarchy vlastnosti. Tato vlastnost vrací seznam OlmFolder objekty, z nichž každý představuje adresář v souboru OLM. Pro další průzkum struktury adresářů přistupte k SubFolders vlastnost každého objektu, která vrací seznam jeho podadresářů. Pomocí těchto vlastností můžete procházet celou hierarchii adresářů souboru OLM a přistupovat ke všem adresářům a podadresářům, které obsahuje.
Níže uvedený příklad zobrazuje seznam všech složek v hierarchickém pořadí:
using (var olm = new OlmStorage(fileName))
{
PrintAllFolders(olm.FolderHierarchy, string.Empty);
}
private void PrintAllFolders(List<OlmFolder> folderHierarchy, string indent)
{
foreach (var folder in folderHierarchy)
{
Console.WriteLine($"{indent}{folder.Name}");
PrintAllFolders(folder.SubFolders, indent+"-");
}
}
Při použití FromFile metodu pro otevření souboru OLM, FolderHierarchy vlastnost nebude ve výchozím nastavení inicializována a vrátí null. V takovém případě volejte metodu GetFolders explicitně, aby se inicializovala FolderHierarchy vlastnost a získat seznam adresářů v souboru OLM:
using (var olm = OlmStorage.FromFile(fileName))
{
var folders = olm.GetFolders();
}
Také je možné získat libovolnou složku podle názvu:
- Zavolejte GetFolder metoda.
- Jako první argument předáte název složky a jako druhý parametr hodnotu, která určuje, zda ignorovat citlivost na velikost písmen při hledání složky.
using (var olm = OlmStorage.FromFile(fileName))
{
// get inbox folder by name
OlmFolder folder = olm.GetFolder("Inbox", true);
}
Seznam e‑mailů
OlmFolder třída, která představuje složku, má následující metody pro získání seznamu e‑mailů:
- EnumerateMessages implementuje iteraci e‑mailů ve složce. V tomto případě každá iterace vrací OlmMessageInfo objekt, který poskytuje stručné informace o e‑mailu.
- EnumerateMapiMessages, také implementuje iteraci e‑mailů ve složce, ale v tomto případě každá iterace vrací MapiMessage objekt, který představuje samotný e‑mail se všemi vlastnostmi.
Použití metody EnumerateMessages
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
Console.WriteLine(messageInfo.Subject);
}
}
Použití metody EnumerateMapiMessages
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var msg in folder.EnumerateMapiMessages())
{
// save message in MSG format
msg.Save($"{msg.Subject}.msg");
}
}
Další užitečné vlastnosti
Další užitečné vlastnosti třídy OlmFolder jsou: HasMessages a MessageCount vlastnosti, které vracejí přítomnost zpráv ve složce a jejich počet.
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
if (folder.HasMessages)
{
Console.WriteLine($"Message count: {folder.MessageCount}");
}
}
Získání nebo nastavení data poslední úpravy zprávy
Datum úpravy představuje datum a čas, kdy byla OLM zpráva naposledy upravena. Můžete použít the OlmMessageInfo.ModifiedDate vlastnost pro získání nebo aktualizaci hodnoty data úpravy OLM zprávy.
Zde je příklad, který demonstruje použití vlastnosti:
foreach (OlmMessageInfo messageInfo in inboxFolder.EnumerateMessages())
{
DateTime modifiedDate = messageInfo.ModifiedDate;
}
Extrahovat e‑maily a položky
OlmStorage třída má ExtractMapiMessage metoda, která umožňuje extrahovat e‑maily. Tato metoda přijímá OlmMessageInfo objektu.
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
if (messageInfo.Date == DateTime.Today)
{
// Extracts today's messages form Inbox
var msg = olm.ExtractMapiMessage(messageInfo);
}
}
}
Použití Traversal API
Můžete extrahovat všechny položky ze souboru Outlook OLM, jak jen to jde, bez vyhazování výjimek, i když jsou některá data původního souboru poškozena. K tomu použijte OlmStorage(TraversalExceptionsCallback callback) konstruktor a Load(string fileName) metoda místo metody FromFile. Konstruktor umožňuje definovat zpětné volání.
using (var olm = new OlmStorage((exception, id) => { /* Exception handling code. */ }))
Zpětné volání poskytuje výjimky při načítání a procházení.
The Load metoda vrací ’true’, pokud byl soubor úspěšně načten a další procházení je možné. Pokud je soubor poškozený a procházení není možné, vrací se ‘false’.
if (olm.Load(fileName))
Následující úryvek kódu a kroky ukazují, jak použít toto API:
- Vytvořte novou instanci OlmStorage třída a předáním zpětného volání pro zpracování výjimek, aby se zvládly všechny výjimky během procesu.
- Načtěte soubor OLM voláním Load metoda instance OlmStorage.
- Pokud je soubor OLM úspěšně načten, získejte hierarchii složek voláním GetFolders metoda na instanci OlmStorage. Vrací seznam objektů OlmFolder.
- Zavolejte metodu ExtractItems a předejte instanci OlmStorage a seznam objektů OlmFolder.
- V metodě ExtractItems projděte každou složku v seznamu složek.
- Pokud složka obsahuje zprávy (e‑mail), vytiskněte název složky do konzole pomocí Console.WriteLine(folder).
- Procházejte zprávy v aktuální složce voláním metody EnumerateMessages na instanci OlmStorage a předáním aktuální složky jako argumentu.
- Vytiskněte předmět každé zprávy do konzole pomocí Console.WriteLine(msg.Subject).
- Pokud má složka podadresáře, zavolejte rekurzivně metodu ExtractItems znovu a předejte instanci OlmStorage a podadresáře aktuální složky.
using (var olm = new OlmStorage((exception, id) => { /* Exception handling code. */ }))
{
if (olm.Load(fileName))
{
var folderHierarchy = olm.GetFolders();
ExtractItems(olm, folderHierarchy);
}
}
private static void ExtractItems(OlmStorage olm, List<OlmFolder> folders)
{
foreach (var folder in folders)
{
if (folder.HasMessages)
{
Console.WriteLine(folder);
foreach (var msg in olm.EnumerateMessages(folder))
{
Console.WriteLine(msg.Subject);
}
}
if (folder.SubFolders.Count > 0)
{
ExtractItems(olm, folder.SubFolders);
}
}
}
Extrahovat zprávy podle identifikátorů
Někdy je potřeba extrahovat vybrané zprávy podle identifikátorů. Například vaše aplikace ukládá identifikátory v databázi a při požadavku zprávu extrahuje. To je efektivní způsob, jak se vyhnout procházení celého úložiště pokaždé při hledání konkrétní zprávy k extrahování. Tato funkce je k dispozici pro úložiště OLM. EntryId vlastnost třídy OlmMessageInfo třída získá identifikátor vstupu zprávy. Přetížená ExtractMapiMessage(string id) metoda třídy OlmStorage třída získá zprávu z OLM.
Níže uvedený kód ukazuje, jak extrahovat zprávy z OLM podle identifikátorů.
Kód provádí následující kroky:
- Spouští smyčku foreach k iteraci přes seznam OlmMessageInfo objektů. Smyčka používá EnumerateMessages metody objektu olmFolder pro získání seznamu všech zpráv v aktuální procházené složce.
- Smyčka extrahuje odpovídající objekt MapiMessage ze úložiště voláním ExtractMapiMessage(string id) metoda OlmStorage třída, předávající EntryId aktuální zprávy jako parametr.
Získaný objekt MapiMessage může být použit k přístupu a manipulaci s obsahem zprávy. Smyčka pokračuje, dokud nejsou zpracovány všechny zprávy ve složce.
foreach (OlmMessageInfo msgInfo in olmFolder.EnumerateMessages())
{
MapiMessage msg = storage.ExtractMapiMessage(msgInfo.EntryId);
}
Získání cesty ke složce
Můžete také získat cestu ke složkám v souboru OML. Aspose.Email poskytuje OlmFolder.Path vlastnost, která vrací cestu ke složce. Následující úryvek kódu demonstruje použití OlmFolder.Path vlastnost pro získání cest složek v souboru OML.
var storage = new OlmStorage("SampleOLM.olm");
PrintPath(storage, storage.FolderHierarchy);
public static void PrintPath(OlmStorage storage, List<OlmFolder> folders)
{
foreach (OlmFolder folder in folders)
{
// print the current folder path
Console.WriteLine(folder.Path);
if (folder.SubFolders.Count > 0)
{
PrintPath(storage, folder.SubFolders);
}
}
}
Počítání položek ve složce
Můžete také spočítat počet položek ve složce. Aspose.Email poskytuje OlmFolder.MessageCount vlastnost, která vrací počet položek ve složce. Následující úryvek kódu ukazuje použití OlmFolder.MessageCount vlastnost pro získání počtu položek ve složkách souboru OML.
var storage = new OlmStorage("SampleOLM.olm");
PrintMessageCount(storage.FolderHierarchy);
public static void PrintMessageCount(List<OlmFolder> folders)
{
foreach (OlmFolder folder in folders)
{
Console.WriteLine("Message Count [" + folder.Name + "]: " + folder.MessageCount);
}
}
Získat celkový počet položek v OlmStorage
OlmStorage třída také obsahuje GetTotalItemsCount() metoda, která vrací celkový počet zpráv obsažených v úložišti OLM.
using (var olm = new OlmStorage("storage.olm"))
{
var count = olm.GetTotalItemsCount();
}
Získání barev kategorií Outlooku
Pro práci s barvami kategorií nebo kategoriemi položek Outlooku uloženými v souborech OLM Aspose.Email nabízí následující řešení:
- OlmItemCategory třída – představuje kategorie položek Outlooku, které jsou k dispozici podle názvu a přiřazených barev, vyjádřených v hexadecimálním formátu.
- GetCategories() metoda třídy OlmStorage třída – načítá seznam kategorií.
Následující příklad kódu demonstruje, jak získat všechny použité kategorie z úložiště OML:
using (var olm = OlmStorage.FromFile("storage.olm"))
{
var categories = olm.GetCategories();
foreach (var category in categories)
{
Console.WriteLine($"Category name: {category.Name}");
//Color is represented as a hexadecimal value: #rrggbb
Console.WriteLine($"Category color: {category.Color}");
}
}
Níže uvedený příklad kódu ukazuje, jak získat barvu kategorie zprávy:
foreach (var msg in olm.EnumerateMessages(folder))
{
if (msg.Categories != null)
{
foreach (var msgCategory in msg.Categories)
{
Console.WriteLine($"Category name: {msgCategory}");
var categoryColor = cat.First(c => c.Name.Equals(msgCategory, StringComparison.OrdinalIgnoreCase)).Color;
Console.WriteLine($"Category color: {categoryColor}");
}
}
}
Převést OLM na PST
OLM je formát databázového souboru používaný Microsoft Outlook pro systémy Mac. Soubory OLM ukládají e‑mailové zprávy, data kalendáře, kontakty a nastavení aplikací. Soubor OLM není podporován Outlookem pro Windows. Proto není možné otevřít soubor Outlook pro Mac (OLM) v Outlooku pro Windows. Pokud chcete migrovat svou poštovní schránku z Outlooku pro Mac do Outlooku pro Windows, je nutné převést soubor OLM na formát PST.
Kroky kódu
Pro konverzi souboru OLM na PST postupujte podle níže uvedených kroků:
- Vytvořte instanci OlmStorage třída pro otevření zdrojového OLM.
- Otevřete zdrojový soubor OLM.
- Vytvořte nový soubor PST pomocí Vytvořit metoda.
- Vytvořte metodu GetContainerClass pro mapování třídy zprávy na třídu složky.
- Vytvořte metodu AddToPst, která rekurzivně načítá každou složku a její zprávy z OLM pomocí metody EnumerateMapiMessages a přidává je do PST ve stejném pořadí pomocí metod AddSubFolder a AddMessage.
Ukázkový kód
Níže uvedený příklad kódu ukazuje, jak převést OLM na PST.
Metoda Main:
// create an instance of OlmStorage class to open source OLM
using (var olm = new OlmStorage("my.olm"))
// create a new PST file
using (var pst = PersonalStorage.Create("my.pst", FileFormatVersion.Unicode))
{
// recursively reads each folder and its messages
// and adds them to the PST in the same order
foreach (var olmFolder in olm.FolderHierarchy)
{
AddToPst(pst.RootFolder, olmFolder);
}
}
Implementace metody GetContainerClass:
public string GetContainerClass(string messageClass)
{
if (messageClass.StartsWith("IPM.Contact") || messageClass.StartsWith("IPM.DistList"))
{
return "IPF.Contact";
}
if (messageClass.StartsWith("IPM.StickyNote"))
{
return "IPF.StickyNote";
}
if (messageClass.StartsWith("IPM.Activity"))
{
return "IPF.Journal";
}
if (messageClass.StartsWith("IPM.Task"))
{
return "IPF.Task";
}
if (messageClass.StartsWith("IPM.Appointment") || messageClass.StartsWith("IPM.Schedule.meeting"))
{
return "IPF.Appointment";
}
return "IPF.Note";
}
Implementace metody AddToPst:
public void AddToPst(FolderInfo pstFolder, OlmFolder olmFolder)
{
FolderInfo pstSubFolder = pstFolder.GetSubFolder(olmFolder.Name);
foreach (var msg in olmFolder.EnumerateMapiMessages())
{
if (pstSubFolder == null)
{
pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name, GetContainerClass(msg.MessageClass));
}
pstSubFolder.AddMessage(msg);
}
if (pstSubFolder == null)
{
pstSubFolder = pstFolder.AddSubFolder(olmFolder.Name);
}
foreach (var olmSubFolder in olmFolder.SubFolders)
{
AddToPst(pstSubFolder, olmSubFolder);
}
}