Outlook Dosyalarını Okuma ve Dönüştürme
OST Dosyalarıyla Çalışma
Aspose.Email for .NET, Microsoft Outlook OST dosyalarını okumak için bir API sağlar. Bir OST dosyasını bir diskten ya da bir akımdan bir örneğe yükleyebilirsiniz. Aspose.Email.Outlook.Pst.PersonalStorage klasörleri, alt klasörleri ve mesajları gibi içeriğine erişmek için bir sınıf. Microsoft Outlook, POP3 veya IMAP posta sunucuları kullanılırken e-postaları saklamak için bir PST dosyası oluşturur. Bunun aksine, Microsoft Exchange posta sunucusu olduğunda bir OST dosyası oluşturur. OST dosyaları ayrıca PST dosyalarına göre daha büyük dosya boyutlarını destekler.
OST Dosyalarını Oku
Aspose.Email ile bir OST dosyasını okuma süreci, PST dosyasını okuma süreciyle tamamen aynıdır. Aynı kod hem PST hem de OST dosyalarını okuyabilir: sadece doğru dosya adını to the PersonalStorage.FromFile() metodu. Aşağıdaki kod parçacığı OST dosyalarını nasıl okuyacağınızı gösterir.
OST’yi PST’ye Dönüştür
Deneyin!
Ücretsiz ile e-postaları ve mesaj arşivlerini çevrimiçi dönüştür Aspose.Email Dönüştürme Uygulaması.
OST dosyalarıyla diğer işlemleri gerçekleştirmek için lütfen aşağıdaki sayfalara bakın:
- PST Dosyalarını Oku ve Bilgi Al
- Bir Outlook PST Dosyasından Mesaj Bilgilerini Alın
- Outlook PST Dosyasından Mesajları Çıkarın ve Diskte ya da Akışta MSG Formatında Kaydedin
- Outlook PST Dosyasından Kişi Bilgilerine Erişin ve Diskte MSG Formatında Kaydedin
PST’yi OST’ye Dönüştür
Aspose.Email, PST’den OST’ye dönüşümü desteklemez çünkü OST, Outlook tarafından bir hesap eklenip posta sunucusuyla senkronize edildiğinde her zaman oluşturulur. PST ve OST dosyaları arasındaki fark, PST’nin yalnızca yerel olarak bulunmasıdır. OST içeriği ayrıca e-posta sunucusunda da bulunur. Bu nedenle, yerel kullanım için PST’yi OST’ye dönüştürmeye gerek yoktur. Ancak PST’yi Outlook’taki İçeri/Dışarı Aktar sihirbazı ile mevcut bir hesaba aktarabilirsiniz.
OLM, Microsoft Outlook tarafından e-postalar, ekler, notlar, takvim verileri, kişiler, görevler, geçmiş ve daha fazlası gibi yerel verileri depolamak için kullanılan özel bir dosya formatıdır. OLM dosyaları yalnızca Outlook for Mac ile uyumludur ve Windows için Outlook tarafından kullanılan PST dosya formatı yerine açılamaz veya erişilemez.
OLM Dosyalarıyla Çalışma
OLM Dosyalarını Aç
OLM formatındaki dosyalar iki şekilde açılabilir:
- yapıcıyı kullanarak
- statik FromFile metodunu kullanarak
Bu metodlar arasında davranış farkları vardır. Aşağıdaki bölüme bakın.
Yapıcıyı Kullanma
Bir dosya açmak için, şu sınıfın yapıcı metodunu çağırın: OlmStorage sınıfına tam dosya adını ya da akışı argüman olarak geçirin:
var fileName = "MyStorage.olm";
var olm = new OlmStorage(fileName);
FromFile Statik Yöntemini Kullanma
Bir dosya açmak için, statik metodu kullanın FromFile ve tam dosya adı ya da akışı argüman olarak verin:
var fileName = "MyStorage.olm";
var olm = OlmStorage.FromFile(fileName);
Klasörleri Getir
Bir OLM dosyasının dizin yapısına erişmek için, şunun bir örneğini oluşturun: OlmStorage sınıfı yapıcı ile oluşturun ve dosya yolunu iletin. Dosya açıldıktan sonra, dizin yapısına şunu kullanarak erişin: FolderHierarchy özellik. Bu özellik bir liste döndürür: OlmFolder nesneler, her biri OLM dosyasındaki bir dizini temsil eder. Dizin yapısını daha fazla keşfetmek için şuraya erişin: SubFolders her nesnenin alt dizinlerinin listesini döndüren özelliği. Bu özellikleri kullanarak OLM dosyasının tüm dizin hiyerarşisinde gezinebilir ve içinde bulunan tüm dizin ve alt dizinlere erişebilirsiniz.
Aşağıdaki örnek, tüm klasörlerin hiyerarşik sırayla listesini gösterir:
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+"-");
}
}
Kullanırken FromFile metod, bir OLM dosyası açmak için, FolderHierarchy özellik varsayılan olarak başlatılmaz ve null döndürür. Bu durumda, başlatmak için GetFolders metodunu açıkça çağırın. FolderHierarchy özelliği ve OLM dosyasındaki dizinlerin listesini alın:
using (var olm = OlmStorage.FromFile(fileName))
{
var folders = olm.GetFolders();
}
Ayrıca, herhangi bir klasörü adını kullanarak almak mümkündür:
- Çağırın GetFolder metod.
- Klasör adını birinci argüman olarak geçin ve klasör ararken büyük/küçük harf duyarlılığını göz ardı edip etmeyeceğini gösteren değeri ikinci parametre olarak geçin.
using (var olm = OlmStorage.FromFile(fileName))
{
// get inbox folder by name
OlmFolder folder = olm.GetFolder("Inbox", true);
}
E-postaları Listele
OlmFolder sınıf, bir klasörü temsil eder ve aşağıdaki yöntemlerle e-posta listesini alır:
- EnumerateMessages bir klasördeki e-postaların yinelemesini uygular. Bu durumda, her yineleme döndürür OlmMessageInfo e-posta hakkında kısa bilgi sağlayan nesne.
- EnumerateMapiMessages, bir klasördeki e-postaların yinelemesini de uygular, ancak bu durumda her yineleme döndürür MapiMessage tüm özellikleriyle e-postayı temsil eden nesne.
EnumerateMessages Yöntemini Kullanma
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
foreach (var messageInfo in folder.EnumerateMessages())
{
Console.WriteLine(messageInfo.Subject);
}
}
EnumerateMapiMessages Yöntemini Kullanma
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");
}
}
Diğer yararlı özellikler
OlmFolder sınıfının diğer yararlı özellikleri şunlardır: HasMessages ve MessageCount özellikler, klasördeki mesajların varlığını ve sayısını döndürür.
using (var olm = OlmStorage.FromFile(fileName))
{
var folder = olm.GetFolder("Inbox", true);
if (folder.HasMessages)
{
Console.WriteLine($"Message count: {folder.MessageCount}");
}
}
Bir mesajın değiştirilme tarihini al veya ayarla
Değiştirilme tarihi, OLM mesajının en son ne zaman değiştirildiğini gösterir. Şunu kullanabilirsiniz: OlmMessageInfo.ModifiedDate OLM mesajının değiştirilme tarihini almak veya güncellemek için özellik.
Özelliğin kullanımını gösteren bir örnek:
foreach (OlmMessageInfo messageInfo in inboxFolder.EnumerateMessages())
{
DateTime modifiedDate = messageInfo.ModifiedDate;
}
E-postaları ve Öğeleri Çıkar
OlmStorage sınıf şu öğelere sahiptir ExtractMapiMessage e-postaları çıkarmayı sağlayan metod. Bu metod bir OlmMessageInfo nesne.
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);
}
}
}
Geçiş API’si Kullanarak
Orijinal dosyanın bazı verileri bozuk olsa bile, istisna fırlatmadan, mümkün olduğunca Outlook OLM dosyasından tüm öğeleri çıkarabilirsiniz. Bunu gerçekleştirmek için, şu kullanın OlmStorage(TraversalExceptionsCallback callback) yapıcı ve Load(string fileName) FromFile yöntemi yerine method. Yapıcı, bir geri arama yöntemi tanımlamaya izin verir.
using (var olm = new OlmStorage((exception, id) => { /* Exception handling code. */ }))
Geri arama yöntemi, yükleme ve geçiş istisnalarını kullanılabilir kılar.
Bu Load yöntem, dosya başarıyla yüklendiyse ve daha fazla dolaşım mümkünse ’true’ döndürür. Dosya bozuk ve dolaşım mümkün değilse, ‘false’ döndürülür.
if (olm.Load(fileName))
Aşağıdaki kod parçacığı ve adımlar, bu API’nin nasıl kullanılacağını gösterir:
- Yeni bir … örneği oluşturun OlmStorage sınıfı, süreç sırasında karşılaşılan istisnaları işlemek için bir istisna işleme geri arama fonksiyonu geçirerek.
- Olm dosyasını şu yöntemi çağırarak yükleyin: Load OlmStorage örneğinin methodu.
- OLM dosyası başarıyla yüklendiyse, klasör hiyerarşisini şu yöntemi çağırarak elde edin: GetFolders OlmStorage örneği üzerindeki method. Bu, OlmFolder nesnelerinin bir listesini döndürür.
- ExtractItems yöntemini, OlmStorage örneği ve OlmFolder nesnelerinin listesini geçirerek çağırın.
- ExtractItems yönteminde, klasörler listesindeki her klasörü yineleyin.
- Klasör mesaj (e-posta) içeriyorsa, klasör adını Console.WriteLine(folder) kullanarak konsola yazdırın.
- Geçerli klasördeki mesajları, OlmStorage örneği üzerinde EnumerateMessages metodunu çağırarak ve geçerli klasörü argüman olarak geçirerek yineleyin.
- Her mesajın konusunu Console.WriteLine(msg.Subject) kullanarak konsola yazdırın.
- Eğer klasörün alt klasörleri varsa, ExtractItems yöntemini yeniden, OlmStorage örneği ve geçerli klasörün alt klasörlerini geçirerek, özyinelemeli olarak çağırın.
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);
}
}
}
Tanımlayıcılara Göre Mesajları Çıkar
Bazen seçilen mesajları tanımlayıcılarla çıkarmak gerekebilir. Örneğin, uygulamanız tanımlayıcıları bir veritabanında tutar ve isteğe bağlı olarak bir mesaj çıkarır. Bu, her seferinde tüm depolamayı dolaşarak belirli bir mesajı bulmayı önleyen etkili bir yoldur. Bu özellik OLM depoları için mevcuttur. EntryId özellik OlmMessageInfo sınıf, mesaj giriş tanımlayıcısını alır. Aşırı yüklenmiş ExtractMapiMessage(string id) metodu OlmStorage sınıf, OLM’den mesajı alır.
Aşağıdaki kod OLM’den tanımlayıcılarla mesajları nasıl çıkaracağınızı gösterir.
Kod aşağıdaki adımları gerçekleştirir:
- bir listedeki öğeler üzerinde dolaşmak için foreach döngüsü başlatır: OlmMessageInfo nesneler. Döngü şunu kullanır: EnumerateMessages olmFolder nesnesinin metodunu kullanarak üzerinde gezilen mevcut klasördeki tüm mesajların listesini alır.
- Döngü, depolamadan ilgili MapiMessage nesnesini şu metodu çağırarak çıkarır: ExtractMapiMessage(string id) metodu OlmStorage sınıf, şunu geçerek EntryId geçerli mesajın bir parametre olarak.
Alınan MapiMessage nesnesi mesajın içeriğine erişmek ve onu değiştirmek için kullanılabilir. Döngü, klasördeki tüm mesajlar işlenene kadar devam eder.
foreach (OlmMessageInfo msgInfo in olmFolder.EnumerateMessages())
{
MapiMessage msg = storage.ExtractMapiMessage(msgInfo.EntryId);
}
Klasör Yolu Alımı
OML dosyasındaki klasörlerin yolunu da alabilirsiniz. Aspose.Email şunu sağlar OlmFolder.Path klasör yolunu döndüren özellik. Aşağıdaki kod örneği, kullanımı göstermektedir OlmFolder.Path OML dosyasındaki klasör yollarını almak için özellik.
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);
}
}
}
Klasördeki Öğeleri Say
Klasördeki öğe sayısını da sayabilirsiniz. Aspose.Email şunu sunar OlmFolder.MessageCount klasördeki öğe sayısını döndüren özellik. Aşağıdaki kod örneği kullanımını gösterir: OlmFolder.MessageCount OML dosyasındaki klasörlerdeki öğe sayısını almak için özellik.
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);
}
}
OlmStorage’ın Toplam Öğeleri Sayısını Al
OlmStorage sınıf ayrıca şunlara sahiptir GetTotalItemsCount() OLM depolamasında bulunan mesaj öğelerinin toplam sayısını döndüren metod.
using (var olm = new OlmStorage("storage.olm"))
{
var count = olm.GetTotalItemsCount();
}
Outlook Kategori Renklerini Alma
OLM dosyalarında depolanan kategori renkleri veya Outlook öğe kategorileriyle çalışmak için Aspose.Email aşağıdaki çözümleri sunar:
- OlmItemCategory sınıf - Outlook öğe kategorilerini temsil eder; adları ve ilişkili renkleri onaltılık biçimde sunar.
- GetCategories() metodu OlmStorage sınıf - kategori listesini alır.
Aşağıdaki kod örneği OML depolamasından kullanılan tüm kategorileri nasıl alacağınızı gösterir:
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}");
}
}
Aşağıdaki kod örneği bir mesaj kategorisinin rengini nasıl alacağınızı gösterir:
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}");
}
}
}
OLM’yi PST’ye Dönüştür
OLM Microsoft Outlook for Mac sistemlerinde kullanılan bir veritabanı dosya formatıdır. OLM dosyaları e-posta mesajları, takvim verileri, iletişim verileri ve uygulama ayarlarını saklar. OLM dosyası Windows için Outlook tarafından desteklenmez. Bu nedenle bir Outlook for Mac (OLM) dosyasını Windows için Outlook’ta açmak mümkün değildir. Posta kutunuzu Outlook for Mac’ten Windows için Outlook’a taşımak istiyorsanız, Outlook for Mac OLM dosyasını Outlook PST dosya formatına dönüştürmek gerekir.
Kod Adımları
Bir OLM dosyasını PST’ye dönüştürmek için aşağıdaki adımları izleyin:
- Bir örnek oluştur OlmStorage kaynak OLM’yi açmak için sınıf.
- Kaynak OLM dosyasını açın.
- Şunu kullanarak yeni bir PST dosyası oluşturun: Oluştur metod.
- Mesaj sınıfını bir klasör sınıfına eşlemek için GetContainerClass metodunu oluşturun.
- AddToPst metodunu oluşturun; bu metod OLM’den her klasörü ve mesajlarını EnumerateMapiMessages metodu ile yinelemeli olarak okur ve aynı sırada AddSubFolder ve AddMessage metodlarıyla PST’ye ekler.
Kod örneği
Aşağıdaki kod örneği OLM’yi PST’ye nasıl dönüştüreceğinizi gösterir.
Main metodu:
// 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);
}
}
GetContainerClass metodunun uygulanması:
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";
}
AddToPst metodunun uygulanması:
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);
}
}