PST Dosyaları Oluşturma ve Yönetme
Mevcut bir PST dosyasını ayrıştırmanın yanı sıra, Aspose.Email sıfırdan bir PST dosyası oluşturma imkanı da sunar. Bu makale, Outlook PST dosyalarının nasıl oluşturulacağını ve onlara alt klasörler veya mesajlar ekleyeceğinizi gösterir.
PST Dosyaları Oluşturma
Yerel diskte yeni bir PST dosyası oluşturmak için şunu kullanmanız gerekir: PersonalStorage class. Bu sınıf sayesinde .NET uygulamalarınızda PST dosyalarını oluşturabilir, okuyabilir ve manipüle edebilirsiniz. Tek bir kod satırı ile sıfırdan bir depolama dosyası oluşturun:
// Create new PST
using var pst = PersonalStorage.Create(path, FileFormatVersion.Unicode);
PST’ye Alt Klasörler Ekle
Root klasöre erişerek ve ardından aşağıdaki yöntemi çağırarak PST dosyasının köküne bir alt klasör ekleyin: AddSubFolder metod.
Aşağıdaki kod örneği, Inbox adlı bir alt klasör eklemenizi gösterir:
// Add new folder "Test"
pst.RootFolder.AddSubFolder("Inbox");
Klasör Kapsayıcı Sınıfını Kontrol Edin
Yeni klasörler oluştururken veya mevcut klasörlere öğe eklerken, yeni öğe veya klasörün kapsayıcı sınıfının, PST depolama dosyasındaki organizasyon hiyerarşisini korumak için üst klasörün kapsayıcı sınıfıyla aynı olmasını sağlamak önemlidir. Bu amaçla Aspose.Email, EnforceContainerClassMatching özellik FolderCreationOptions class. Özellik, eklenen klasörün kapsayıcı sınıfının üst klasörün kapsayıcı sınıfıyla eşleşip eşleşmeyeceğini zorunlu kılıp kılamayacağını belirler. ’true’ olarak ayarlanırsa, kapsayıcı sınıflar eşleşmediğinde bir istisna fırlatılır. Varsayılan değer ‘false’tur.
Aşağıdaki kod örneği, şunun kullanımını göstermektedir: EnforceContainerClassMatching eşleşmeyen konteyner sınıflarına sahip klasörler eklenirken istisna fırlatılıp fırlatılmayacağını kontrol eden özellik:
using (var pst = PersonalStorage.Create("storage.pst", FileFormatVersion.Unicode))
{
// Create a standard Contacts folder with the IPF.Contacts container class.
var contacts = pst.CreatePredefinedFolder("Contacts", StandardIpmFolder.Contacts);
// An exception will not arise. EnforceContainerClassMatching is false by default.
contacts.AddSubFolder("Subfolder1", "IPF.Note");
// An exception will occur as the container class of the subfolder being added (IPF.Note)
// does not match the container class of the parent folder (IPF.Contact).
contacts.AddSubFolder("Subfolder3", new FolderCreationOptions {EnforceContainerClassMatching = true, ContainerClass = "IPF.Note"});
}
Not: PST içinde klasör oluşturulurken konteyner sınıfı eşlemesi yapılırken beklenmeyen davranışları önlemek için istisna yönetiminin doğru yapıldığından emin olun.
Klasör Konteyner Sınıfını Değiştir
Bazen klasör konteyner sınıfını değiştirmek gerekir. Yaygın bir örnek, farklı tipteki (randevu, mesaj vb.) mesajların aynı klasöre eklenmesidir. Bu durumlarda, klasördeki tüm öğelerin doğru görüntülenmesi için klasör sınıfının değiştirilmesi gerekir. Aşağıdaki kod örneği bu amaçla bir PST klasörünün konteyner sınıfının nasıl değiştirileceğini gösterir.
using var pst = PersonalStorage.FromFile("PersonalStorage1.pst);
var folder = pst.RootFolder.GetSubFolder("Inbox");
folder.ChangeContainerClass("IPF.Note");
Dosyaları PST’ye Ekleme
Microsoft Outlook’un temel işlevi e-postalar, takvimler, görevler, kişiler ve günlük girdilerini yönetmektir. Ayrıca dosyalar da bir PST klasörüne eklenebilir ve ortaya çıkan PST eklenen belgelerin kaydını tutar. Aspose.Email, mesaj, kişi, görev ve günlük girdileri eklemenin yanı sıra bir klasöre dosya ekleme imkanı sağlar. Aşağıdaki kod örneği Aspose.Email kullanarak bir PST klasörüne belge eklemenin nasıl yapılacağını gösterir.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
using (var personalStorage = PersonalStorage.Create(dataDir + "Ps1_out.pst", FileFormatVersion.Unicode))
{
var folder = personalStorage.RootFolder.AddSubFolder("Files");
// Add Document.doc file with the "IPM.Document" message class by default.
folder.AddFile(dataDir + "attachment_1.doc", null);
}
PST Dosyalarına Mesaj Ekleme
Aspose.Email ile oluşturduğunuz veya yüklediğiniz bir PST dosyasının alt klasörlerine mesaj ekleyebilirsiniz. Bu makale, diskteki iki mesajı bir PST’nin Inbox alt klasörüne ekler. Şunu kullanın: PersonalStorage ve FolderInfo PST dosyalarına mesaj eklemek için sınıflar. Bir PST dosyasının Inbox klasörüne mesaj eklemek için:
- FolderInfo sınıfının bir örneğini oluşturun ve Inbox klasörünün içeriğiyle yükleyin.
- diskten Inbox klasörüne mesaj eklemek için şu metod çağrılır: FolderInfo.AddMessage() metod. FolderInfo sınıf şu özelliği sunar AddMessages klasöre çok sayıda mesaj eklemeyi sağlayan metod, disk I/O işlemlerini azaltır ve performansı artırır.
Aşağıdaki kod örneği, Inbox adlı bir PST alt klasörüne mesajların nasıl ekleneceğini gösterir.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// Create new PST
var personalStorage = PersonalStorage.Create(dataDir, FileFormatVersion.Unicode);
// Add new folder "Inbox"
personalStorage.RootFolder.AddSubFolder("Inbox");
// Select the "Inbox" folder
var inboxFolder = personalStorage.RootFolder.GetSubFolder("Inbox");
// Add some messages to "Inbox" folder
inboxFolder.AddMessage(MapiMessage.FromFile(RunExamples.GetDataDir_Outlook() + "MapiMsgWithPoll.msg"));
Performansı Artırarak Toplu Mesaj Ekle
Bir PST’ye tek tek mesaj eklemek daha fazla disk I/O işlemi gerektirir ve performansı yavaşlatabilir. Performansı artırmak için, mesajlar toplu modda PST’ye eklenebilir ve I/O işlemleri en aza indirilebilir. Bu AddMessages yöntem, mesajları toplu olarak eklemenizi sağlar ve aşağıdaki senaryolarda kullanılabilir. Ayrıca, MessageAdded Bir mesaj klasöre eklendiğinde gerçekleşen olay.
Başka bir PST’den Mesaj Ekle
Başka bir PST’den mesaj eklemek için şunu kullanın: FolderInfo.EnumerateMapiMessages değer döndüren yöntem IEnumerable<MapiMessage>:
using var srcPst = PersonalStorage.FromFile(@"source.pst", false);
using var destPst = PersonalStorage.FromFile(@"destination.pst");
// Get the folder by name
var srcFolder = srcPst.RootFolder.GetSubFolder("SomeFolder");
var destFolder = destPst.RootFolder.GetSubFolder("SomeFolder");
destFolder.MessageAdded += new MessageAddedEventHandler(OnMessageAdded);
destFolder.AddMessages(srcFolder.EnumerateMapiMessages());
// Handles the MessageAdded event.
static void OnMessageAdded(object sender, MessageAddedEventArgs e)
{
Console.WriteLine($"Added: {e.EntryId}");
}
Dizinden Mesaj Ekle
Dizinden mesaj eklemek için şunu oluşturun: GetMessages(string pathToDir) adlandırılmış yineleyici yöntem, döndürür IEnumerable<MapiMessage>:
using var pst = PersonalStorage.FromFile(@"storage.pst");
var folder = pst.RootFolder.GetSubFolder("SomeFolder");
folder.MessageAdded += OnMessageAdded;
folder.AddMessages(GetMessages(@"MessageDirectory"));
// Named iterator method to read messages from directory.
static IEnumerable<MapiMessage> GetMessages(string pathToDir)
{
string[] files = Directory.GetFiles(pathToDir, "*.msg");
foreach (var file in files)
{
yield return MapiMessage.Load(file);
}
}
// Handles the MessageAdded event.
static void OnMessageAdded(object sender, MessageAddedEventArgs e)
{
Console.WriteLine($"Added: {e.EntryId}");
}
Diskten Mesajları Yükle
Aşağıdaki kod örneği bir disktan mesajların nasıl yükleneceğini gösterir.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
private static void AddMessagesInBulkMode(string fileName, string msgFolderName)
{
using (PersonalStorage personalStorage = PersonalStorage.FromFile(fileName))
{
FolderInfo folder = personalStorage.RootFolder.GetSubFolder("myInbox");
folder.MessageAdded += OnMessageAdded;
folder.AddMessages(new MapiMessageCollection(msgFolderName));
}
}
static void OnMessageAdded(object sender, MessageAddedEventArgs e)
{
Console.WriteLine(e.EntryId);
Console.WriteLine(e.Message.Subject);
}
IEnumerable Uygulaması
Aşağıdaki kod örneği IEnumerable Uygulamasının nasıl kullanılacağını gösterir.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
public class MapiMessageCollection : IEnumerable<MapiMessage>
{
private string path;
public MapiMessageCollection(string path)
{
this.path = path;
}
public IEnumerator<MapiMessage> GetEnumerator()
{
return new MapiMessageEnumerator(path);
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class MapiMessageEnumerator : IEnumerator<MapiMessage>
{
private readonly string[] files;
private int position = -1;
public MapiMessageEnumerator(string path)
{
string path1 = RunExamples.GetDataDir_Outlook();
files = Directory.GetFiles(path1);
}
public bool MoveNext()
{
position++;
return (position < files.Length);
}
public void Reset()
{
position = -1;
}
object IEnumerator.Current
{
get
{
return Current;
}
}
public MapiMessage Current
{
get
{
try
{
return MapiMessage.FromFile(files[position]);
}
catch (IndexOutOfRangeException)
{
throw new InvalidOperationException();
}
}
}
public void Dispose()
{
}
}