Membuat dan Mengelola File PST
Selain memparsing file PST yang ada, Aspose.Email menyediakan cara untuk membuat file PST dari awal. Artikel ini menunjukkan cara membuat file PST Outlook dan menambahkan sub-folder atau pesan ke dalamnya.
Membuat File PST
Untuk membuat file PST baru di disk lokal, Anda perlu menggunakan PersonalStorage class. Dengan kelas ini, Anda dapat membuat, membaca, dan memanipulasi file PST dalam aplikasi .NET Anda. Buat file penyimpanan dari awal dengan satu baris kode:
// Create new PST
using var pst = PersonalStorage.Create(path, FileFormatVersion.Unicode);
Tambahkan Sub-folder ke PST
Tambahkan subfolder di root file PST dengan mengakses folder Root dan kemudian memanggil the AddSubFolder metode.
Potongan kode berikut menunjukkan cara menambahkan subfolder bernama Inbox:
// Add new folder "Test"
pst.RootFolder.AddSubFolder("Inbox");
Periksa Kelas Kontainer Folder
Saat membuat folder baru atau menambahkan item ke folder yang sudah ada, penting untuk memastikan bahwa kelas kontainer dari item atau folder baru sesuai dengan kelas kontainer folder induk untuk mempertahankan hierarki organisasi dalam file penyimpanan PST. Untuk tujuan ini, Aspose.Email memiliki EnforceContainerClassMatching properti dari FolderCreationOptions class. Properti ini menentukan apakah memaksa memeriksa kelas kontainer folder yang ditambahkan terhadap kelas kontainer folder induk. Jika disetel ke ’true’, sebuah pengecualian akan dilempar jika kelas kontainer tidak cocok. Default adalah ‘false’.
Contoh kode berikut mendemonstrasikan penggunaan EnforceContainerClassMatching properti untuk mengontrol apakah pengecualian harus dilempar saat menambahkan folder dengan kelas kontainer yang tidak cocok:
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"});
}
Catatan: Pastikan penanganan pengecualian yang tepat saat menegakkan pencocokan kelas kontainer untuk mencegah perilaku tak terduga selama pembuatan folder di PST.
Ubah Kelas Kontainer Folder
Terkadang diperlukan untuk mengubah kelas kontainer folder. Contoh umum adalah ketika pesan dengan tipe berbeda (janji, pesan, dll.) ditambahkan ke folder yang sama. Dalam kasus seperti itu, kelas folder perlu diubah untuk semua elemen dalam folder agar ditampilkan dengan benar. Potongan kode berikut menunjukkan cara mengubah kelas kontainer folder dalam PST untuk tujuan ini.
using var pst = PersonalStorage.FromFile("PersonalStorage1.pst);
var folder = pst.RootFolder.GetSubFolder("Inbox");
folder.ChangeContainerClass("IPF.Note");
Menambahkan File ke PST
Fungsi utama Microsoft Outlook adalah mengelola email, kalender, tugas, kontak, dan entri jurnal. Selain itu, file juga dapat ditambahkan ke folder PST dan PST yang dihasilkan menyimpan catatan dokumen yang ditambahkan. Aspose.Email menyediakan fasilitas untuk menambahkan file ke folder dengan cara yang sama bersama dengan menambahkan pesan, kontak, tugas, dan entri jurnal ke PST. Potongan kode berikut menunjukkan cara menambahkan dokumen ke folder PST menggunakan Aspose.Email.
// 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);
}
Menambahkan Pesan ke File PST
Dengan Aspose.Email Anda dapat menambahkan pesan ke subfolder file PST yang Anda buat atau muat. Artikel ini menambahkan dua pesan dari disk ke subfolder Inbox dari PST. Gunakan PersonalStorage dan FolderInfo kelas untuk menambahkan pesan ke file PST. Untuk menambahkan pesan ke folder Inbox file PST:
- Buat sebuah instance dari kelas FolderInfo dan muat dengan konten folder Inbox.
- Tambahkan pesan dari disk ke folder Inbox dengan memanggil FolderInfo.AddMessage() metode. FolderInfo kelas mengekspos AddMessages metode yang memungkinkan menambahkan sejumlah besar pesan ke folder, mengurangi operasi I/O ke disk dan meningkatkan kinerja.
Potongan kode di bawah ini menunjukkan cara menambahkan pesan ke subfolder PST bernama Inbox.
// 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"));
Tambahkan Pesan Bulk dengan Kinerja yang Ditingkatkan
Menambahkan pesan individu ke PST memerlukan lebih banyak operasi I/O ke disk dan dapat memperlambat kinerja. Untuk meningkatkan kinerja, pesan dapat ditambahkan ke PST dalam mode bulk untuk meminimalkan operasi I/O. AddMessages metode memungkinkan Anda menambahkan pesan secara bulk dan dapat digunakan dalam skenario berikut. Selain itu, the MessageAdded peristiwa terjadi ketika pesan ditambahkan ke folder.
Tambah Pesan dari PST Lain
Untuk menambahkan pesan dari PST lain, gunakan the FolderInfo.EnumerateMapiMessages metode yang mengembalikan 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}");
}
Tambah Pesan dari Direktori
Untuk menambahkan pesan dari direktori, buat the GetMessages(string pathToDir) metode iterator bernama yang mengembalikan 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}");
}
Muat Pesan dari Disk
Potongan kode berikut menunjukkan cara memuat pesan dari disk.
// 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);
}
Implementasi IEnumerable
Potongan kode berikut menunjukkan cara menggunakan Implementasi IEnumerable.
// 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()
{
}
}