
استيراد رسائل EML إلى ملف PST هو متطلب شائع، خاصة للمستخدمين الذين ينتقلون بين عملاء البريد الإلكتروني أو أرشفة رسائل البريد الإلكتروني لأغراض التخزين والنسخ الاحتياطي. يحتفظ تنسيق PST بالهيكل والتنسيق والمرفقات للمحتوى، مما يجعله مناسبًا للتكامل والإدارة السلسة داخل تطبيق Outlook. الميزة الأساسية لهذا التنسيق الملف المملوك من Microsoft هي القدرة على إنشاء أرشيفات محلية لبيانات البريد الإلكتروني، مما يجعل من الممكن إدارة والوصول إلى رسائل البريد الإلكتروني، وجهات الاتصال، ومعلومات أخرى ذات صلة دون اتصال. في هذه المقالة، سنستكشف كيفية استيراد EML إلى PST بسهولة وكفاءة باستخدام مكتبة C# متقدمة مع عينات كود وخطوات.
.NET API لإدارة EML
Aspose.Email لـ .NET هي واجهة برمجة تطبيقات قوية ومتعددة الاستخدامات توفر مجموعة واسعة من الميزات للعمل مع رسائل البريد الإلكتروني وخوادم البريد في تطبيقات .NET. توفر واجهة البرمجة تكاملًا سلسًا مع بروتوكولات البريد الإلكتروني الشائعة والتنسيقات، مما يمكّن المطورين من إنشاء ومعالجة رسائل البريد الإلكتروني بسهولة.
تتمثل إحدى الميزات الملحوظة لـ Aspose.Email في دعمها الواسع لتحويل رسائل البريد الإلكتروني بين تنسيقات مختلفة، بما في ذلك نقل EML إلى PST. من خلال الاستفادة من مجموعة الغنية من الفئات والأساليب التي تقدمها Aspose.Email، يمكن للمطورين تنفيذ مهام معقدة تتعلق بالبريد الإلكتروني، مثل التعامل مع المرفقات، إدارة المجلدات، وتحويل رسائل البريد الإلكتروني بين تنسيقات مختلفة. قبل الغوص في الكود، ستحتاج إلى دمج المكتبة في مشروع C#. يمكنك الحصول عليها بسهولة عن طريق تنزيلها من موقع Aspose أو باستخدام NuGet.
Install-Package Aspose.Email
بمجرد أن تصبح المكتبة جزءًا من مشروعك، يمكنك البدء في كتابة الكود.
استيراد رسالة EML واحدة إلى ملف PST
توفر واجهة برمجة تطبيقات Aspose.Email الشاملة عينة كود سهلة وبديهية وخطوات لإضافة رسالة EML إلى ملف PST:
- قم بإنشاء ملف تخزين شخصي جديد باستخدام Create من فئة PersonalStorage مع تحديد اسم الملف وإصدار التنسيق كمعاملات.
- قم بإنشاء مجلد “الوارد” محدد مسبقًا داخل ملف PST باستخدام CreatePredefinedFolder من فئة PersonalStorage، مع تحديد “الوارد” كاسم المجلد وStandardIpmFolder.Inbox كنوع المجلد.
- قم بتحميل رسالة البريد الإلكتروني من ملف باستخدام ‘Load’ من فئة MapiMessage، مع تحديد اسمها ونسخة من EmlLoadOptions كمعاملات.
- أضف رسالة البريد الإلكتروني المحملة إلى مجلد الوارد الذي تم إنشاؤه مسبقًا داخل ملف PST باستخدام AddMessage من فئة FolderInfo.
using (var pst = PersonalStorage.Create("test.pst", FileFormatVersion.Unicode)) | |
{ | |
var inboxFolder = pst.CreatePredefinedFolder("Inbox", StandardIpmFolder.Inbox); | |
var msg = MapiMessage.Load("test.eml", new EmlLoadOptions()); | |
inboxFolder.AddMessage(msg); | |
} |
نتيجة لذلك، يتم إنشاء ملف تخزين شخصي جديد باسم “test.pst”، ويتم إضافة الرسالة المحملة من الملف “test.eml” إلى مجلد الوارد، وهي متاحة لمزيد من المعالجة أو التخزين.
استيراد رسائل EML متعددة إلى ملف PST
تجعل Aspose.Email من الممكن إضافة مجموعة من الرسائل من مجلد إلى ملف PST. تسمح لك AddMessages من فئة FolderInfo باستيراد أكثر من رسالة EML واحدة إلى مجلد الوارد داخل ملف التخزين. ستظهر لك عينة الكود التالية كيفية تنفيذ هذه الميزة في مشروعك:
- قم بإنشاء ملف تخزين شخصي جديد باستخدام Create من فئة PersonalStorage مع تحديد اسم الملف وإصدار التنسيق كمعاملات.
- قم بإنشاء مجلد “الوارد” محدد مسبقًا داخل ملف PST باستخدام CreatePredefinedFolder من فئة PersonalStorage، مع تحديد “الوارد” كاسم المجلد وStandardIpmFolder.Inbox كنوع المجلد.
- أضف رسالة أو أكثر من رسائل البريد الإلكتروني من مجلد إلى مجلد الوارد الذي تم إنشاؤه مسبقًا داخل ملف PST باستخدام AddMessages من فئة FolderInfo، مع تحديد كائن MapiMessageEnumerator الذي يمثل الرسائل المراد استيرادها من مسار المجلد المحدد.
using (var pst = PersonalStorage.Create("test.pst", FileFormatVersion.Unicode)) | |
{ | |
var inboxFolder = pst.CreatePredefinedFolder("Inbox", StandardIpmFolder.Inbox); | |
inboxFolder.AddMessages(new MapiMessageEnumerator("PathToFolder")); | |
} |
هنا، نستفيد من ‘MapiMessageEnumerator’ للتكرار عبر ملفات EML في المجلد المصدر وإضافتها إلى ملف PST.
تنفيذ عداد MapiMessage
مع Aspose.Email، يمكنك تعريف فئة ‘MapiMessageEnumerator’ التي تنفذ واجهة IEnumerable. تسمح لك هذه الفئة بالتكرار عبر مجموعة من كائنات MapiMessage، التي تمثل رسائل البريد الإلكتروني، المخزنة كملفات .eml في مجلد محدد. تعمل الفئة المتداخلة Enumerator داخل MapiMessageEnumerator كعداد، تقوم بتحميل ملفات EML ككائنات MapiMessage وإدارة عملية التكرار. تحتوي على طرق للتكرار عبر الملفات، والتخلص من الموارد، وإعادة تعيين العداد.
ستظهر لك عينة الكود التالية كيفية التكرار عبر مجموعة من MapiMessages برمجيًا:
- تعريف فئة ‘MapiMessageEnumerator’ التي تقبل معلمة ‘folderPath’، التي تشير إلى الدليل الذي توجد فيه ملفات .eml.
- إنشاء وإرجاع مثيل جديد من فئة ‘Enumerator’ باستخدام طريقة ‘GetEnumerator’، مع تمرير مسار المجلد.
- تخزين ‘folderPath’ في حقل واستخدام ‘IEnumerator’ للتكرار عبر مسارات الملفات داخل المجلد.
- عند إنشاء فئة ‘Enumerator’، قم بتهيئة ‘folderPath’ واستدعاء طريقة ‘Reset()’ لتحضير ‘fileEnumerator’.
- تنفيذ خاصية ‘Current’ وخصائص Current الخاصة بـ IEnumerator بشكل صريح.
- توفير طريقة ‘Dispose’ للتخلص من ‘fileEnumerator’ و’current MapiMessage’ إذا كانا موجودين.
- استخدام طريقة ‘MoveNext’ للتكرار عبر مسارات الملفات، ومحاولة تحميل ‘MapiMessage’ من الملف، وتسجيل أو التعامل مع أي أخطاء تحدث.
- في طريقة ‘Reset’، التخلص من ‘fileEnumerator’ وإنشاء واحدة جديدة عن طريق تعداد ملفات .eml داخل ‘folderPath’.
public class MapiMessageEnumerator : IEnumerable<MapiMessage> | |
{ | |
private readonly string folderPath; | |
public MapiMessageEnumerator(string folderPath) | |
{ | |
this.folderPath = folderPath; | |
} | |
public IEnumerator<MapiMessage> GetEnumerator() | |
{ | |
return new Enumerator(folderPath); | |
} | |
IEnumerator IEnumerable.GetEnumerator() | |
{ | |
return GetEnumerator(); | |
} | |
private class Enumerator : IEnumerator<MapiMessage> | |
{ | |
private readonly string folderPath; | |
private IEnumerator<string> fileEnumerator; | |
public Enumerator(string folderPath) | |
{ | |
this.folderPath = folderPath; | |
Reset(); | |
} | |
public MapiMessage Current { get; private set; } | |
object IEnumerator.Current | |
{ | |
get { return Current; } | |
} | |
public void Dispose() | |
{ | |
fileEnumerator.Dispose(); | |
Current?.Dispose(); | |
} | |
public bool MoveNext() | |
{ | |
while (fileEnumerator.MoveNext()) | |
{ | |
var filePath = fileEnumerator.Current; | |
try | |
{ | |
Current?.Dispose(); // Dispose previous MailMessage if any | |
Current = MapiMessage.Load(filePath, new EmlLoadOptions()); | |
return true; | |
} | |
catch (Exception ex) | |
{ | |
// Log or handle the error | |
Console.WriteLine($"Failed to parse message: {ex.Message}"); | |
} | |
} | |
return false; | |
} | |
public void Reset() | |
{ | |
fileEnumerator?.Dispose(); | |
fileEnumerator = Directory.EnumerateFiles(folderPath, "*.eml").GetEnumerator(); | |
Current = null; | |
} | |
} | |
} |
الخاتمة
في الختام، سواء كنت تنتقل بين عملاء البريد الإلكتروني أو تقوم بأرشفة بيانات البريد الإلكتروني لأغراض التخزين والنسخ الاحتياطي، توفر Aspose.Email لـ .NET حلاً موثوقًا وغنيًا بالميزات لنقل ملفات EML إلى تنسيق PST مما يجعلها عملية فعالة وسهلة. مع عينات كود بديهية ووثائق شاملة، يمكن للمطورين تنفيذ هذه الوظيفة الأساسية بسهولة في مشاريعهم. بالإضافة إلى ذلك، يقدم المنتدى المجاني نظام دعم مدفوع يقوده المجتمع لأي أسئلة أو مشكلات قد تطرأ أثناء التنفيذ. للحصول على مزيد من المعلومات حول ميزات واجهة برمجة التطبيقات العالية، يرجى زيارة موارد المرجع لدينا.