C# .NET'te MS Outlook PST Dosyalarını Okuyun

PST (Kişisel Depolama Tablosu), MS Outlook, Exchange ve Windows Messaging gibi farklı Microsoft programları tarafından kullanılan bir depolama dosyası biçimidir. PST dosyaları mesajları, kişileri, takvimleri, etkinlikleri vb. depolayabilir. Bazı durumlarda, bir PST dosyasını ayrıştırmanız ve ondan programlı olarak veri çıkarmanız gerekebilir. Bunu başarmak için bu makale, MS Outlook PST dosyalarının C# .NET kullanılarak nasıl okunacağını gösterir. Özellikle, klasörlerin bilgilerini nasıl çıkaracağınızı, e-postaları nasıl okuyacağınızı ve bir PST dosyasından kişileri nasıl alacağınızı öğreneceksiniz.

Outlook PST Dosyalarını Okumak için .NET API

Aspose.Email for .NET, .NET uygulamaları içinden e-postalar oluşturup göndermenizi sağlayan güçlü bir e-posta işleme API’sidir. Ayrıca, popüler e-posta ve depolama dosyası biçimleriyle çalışmayı destekler. Bu API’yi, PST dosyalarından klasör bilgilerini, mesajları ve kişileri okumak için kullanacağız. API’yi indirebilir veya NuGet aracılığıyla yükleyebilirsiniz.

PM> Install-Package Aspose.Email -Version 22.3.0

C# .NET’te bir Outlook PST Dosyasını Okuyun

Aşağıdakiler, bir PST dosyasını okuma ve C# dilindeki bilgilerini ayıklama adımlarıdır.

Aşağıdaki kod örneği, bir PST dosyasının nasıl ayrıştırılacağını ve klasör bilgilerinin nasıl alınacağını gösterir.

// PST dosyasını yükle
PersonalStorage personalStorage = PersonalStorage.FromFile("PersonalStorage.pst");

// Klasör bilgilerini al
FolderInfoCollection folderInfoCollection = personalStorage.RootFolder.GetSubFolders();

// Bilgilerini görüntülemek için her klasöre göz atın
foreach (FolderInfo folderInfo in folderInfoCollection)
{
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("Total items: " + folderInfo.ContentCount);
    Console.WriteLine("Total unread items: " + folderInfo.ContentUnreadCount);
    Console.WriteLine("-----------------------------------");
}

C# dilinde bir PST Dosyasından E-postaları Okuyun

E-postalar, MS Outlook tarafından PST dosyalarında depolanan başlıca varlıklardır. Şimdi C# dilinde bir PST dosyasından e-posta mesajlarının nasıl okunacağını görelim.

Aşağıdaki kod örneği, C# .NET’te bir PST dosyasından iletilerin nasıl ayıklanacağını gösterir.

// Outlook PST dosyasını yükleyin
PersonalStorage pst = PersonalStorage.FromFile("PersonalStorage.pst");

// PST dosyasının Ekran Formatını Alın
Console.WriteLine("Display Format: " + pst.Format);

// Klasörleri ve mesaj bilgilerini alın
Aspose.Email.Storage.Pst.FolderInfo folderInfo = pst.RootFolder;

// Her klasörden mesaj dosyalarını ayıklamak için özyinelemeli yöntemi çağırın
ExtractMsgFiles(folderInfo, pst);

///<summary>
/// Bu, bir klasörün içeriğini görüntülemek için özyinelemeli bir yöntemdir
///</summary>
///<param name="folderInfo"></param>
///<param name="pst"></param>
private static void ExtractMsgFiles(Aspose.Email.Storage.Pst.FolderInfo folderInfo, PersonalStorage pst)
{
    // Klasör adını göster
    Console.WriteLine("Folder: " + folderInfo.DisplayName);
    Console.WriteLine("==================================");
            
    // Bu klasördeki tüm iletiler arasında dolaşın
    Aspose.Email.Storage.Pst.MessageInfoCollection messageInfoCollection = folderInfo.GetContents();
    foreach (Aspose.Email.Storage.Pst.MessageInfo messageInfo in messageInfoCollection)
    {
        Console.WriteLine("Saving message {0} ....", messageInfo.Subject);
                
        // Mesajı MapiMessage örneğinde alın
        MapiMessage message = pst.ExtractMessage(messageInfo);
                
        // Bu mesajı msg formatında diske kaydedin
        message.Save(message.Subject.Replace(":", " ") + ".msg");
                
        // msg formatında akış için bu mesajı kaydedin
        MemoryStream messageStream = new MemoryStream();
        message.Save(messageStream);
    }

    // Her alt klasör için bu yöntemi yinelemeli olarak çağırın
    if (folderInfo.HasSubFolders == true)
    {
        foreach (Aspose.Email.Storage.Pst.FolderInfo subfolderInfo in folderInfo.GetSubFolders())
        {
            ExtractMsgFiles(subfolderInfo, pst);
        }
    }
}

Kişileri C# dilinde bir PST Dosyasından Çıkarın

Bazı durumlarda, kişilerin bir PST dosyasında saklanan bilgilerini çıkarmanız gerekebilir. Aşağıdaki adımlar, C# dilinde bir PST dosyasındaki kişilere nasıl erişileceğini gösterir.

Aşağıdaki kod örneği, C# dilinde bir PST dosyasından kişilerin nasıl ayıklanacağını gösterir.

// Outlook PST dosyasını yükleyin
PersonalStorage personalStorage = PersonalStorage.FromFile("SampleContacts.pst");

// Kişiler klasörünü alın
FolderInfo folderInfo = personalStorage.RootFolder.GetSubFolder("Contacts");

// Bu klasördeki tüm kişiler arasında dolaşın
MessageInfoCollection messageInfoCollection = folderInfo.GetContents();

foreach (MessageInfo messageInfo in messageInfoCollection)
{
    // İletişim bilgilerini alın
    MapiMessage mapi = personalStorage.ExtractMessage(messageInfo);
    
    // MapiContact'a yayınla
    MapiContact contact = (MapiContact)mapi.ToMapiMessageItem();

    // Bazı içerikleri ekranda göster
    Console.WriteLine("Name: " + contact.NameInfo.DisplayName);
    
    // MSG formatında diske kaydet
    if (contact.NameInfo.DisplayName != null)
    {
        MapiMessage message = personalStorage.ExtractMessage(messageInfo);
        
        // Dosya adı olarak kullanılamayan geçersiz karakterlerden kurtulun
        string messageName = message.Subject.Replace(":", " ").Replace("\\", " ").Replace("?", " ").Replace("/", " ");
        message.Save(dataDir + "Contacts\\" + messageName + "_out.msg");
    }
}

Ücretsiz API Lisansı Alın

Geçici bir lisans alarak Aspose.Email for .NET’i ücretsiz olarak deneyebilirsiniz.

Çözüm

Bu makalede, C# .NET’te programlı olarak PST dosyalarını okumayı öğrendiniz. Ayrıca, C# dilinde bir PST dosyasından klasör bilgilerini nasıl okuyacağınızı, e-postaları nasıl alacağınızı ve kişileri nasıl çıkaracağınızı gördünüz. Ayrıca, dokümantasyon kullanarak Aspose.Email for .NET hakkında daha fazlasını keşfedebilirsiniz. Ayrıca sorularınızı veya sorularınızı forumumuzda paylaşabilirsiniz.

Ayrıca bakınız