
وارد کردن پیامهای EML به یک فایل PST یک نیاز متداول است، بهویژه برای کاربرانی که بین کلاینتهای ایمیل مهاجرت میکنند یا ایمیلها را برای اهداف ذخیرهسازی و پشتیبانگیری آرشیو میکنند. فرمت PST ساختار، قالببندی و پیوستهای محتوا را حفظ میکند، و آن را برای ادغام و مدیریت بدون درز در برنامه Outlook مناسب میسازد. مزیت اصلی این فرمت فایل اختصاصی مایکروسافت، قابلیت ایجاد آرشیوهای محلی از دادههای ایمیل است که امکان مدیریت و دسترسی به ایمیلها، مخاطبین و اطلاعات مرتبط دیگر به صورت آفلاین را فراهم میکند. در این مقاله، ما بررسی خواهیم کرد که چگونه به راحتی و به طور مؤثر EML را به PST با استفاده از یک کتابخانه پیشرفته C# با نمونههای کد و مراحل وارد کنیم.
.NET API برای مدیریت EML
Aspose.Email برای .NET یک API قوی و چندمنظوره است که مجموعه وسیعی از ویژگیها را برای کار با پیامهای ایمیل و سرورهای ایمیل در برنامههای .NET ارائه میدهد. این API ادغام بیوقفه با پروتکلها و فرمتهای محبوب ایمیل را فراهم میکند و به توسعهدهندگان امکان میدهد که پیامهای ایمیل را به سادگی ایجاد و دستکاری کنند.
یکی از ویژگیهای قابل توجه Aspose.Email، پشتیبانی گسترده آن از تبدیل ایمیلها بین فرمتهای مختلف، از جمله انتقال EML به PST است. با بهرهگیری از مجموعه غنی کلاسها و متدهای ارائه شده توسط Aspose.Email، توسعهدهندگان میتوانند وظایف پیچیده مرتبط با ایمیل، مانند مدیریت پیوستها، مدیریت پوشهها و تبدیل ایمیلها بین فرمتهای مختلف را انجام دهند. قبل از ورود به کد، شما باید این کتابخانه را به پروژه C# خود ادغام کنید. میتوانید به راحتی آن را با دانلود از وبسایت Aspose یا با استفاده از NuGet دریافت کنید.
Install-Package Aspose.Email
پس از اینکه این کتابخانه بخشی از پروژه شما شد، شما آمادهاید تا کدنویسی را آغاز کنید.
وارد کردن یک پیام EML به یک فایل PST
API جامع Aspose.Email نمونه کد و مراحل ساده و بصری را برای اضافه کردن یک پیام EML به یک فایل PST ارائه میدهد:
- یک فایل ذخیرهسازی شخصی جدید ایجاد کنید با استفاده از متد Create کلاس PersonalStorage که نام فایل و نسخه فرمت را به عنوان پارامتر مشخص میکند.
- یک پوشه “Inbox” پیشفرض در فایل PST با استفاده از متد CreatePredefinedFolder کلاس PersonalStorage ایجاد کنید، با مشخص کردن “Inbox” به عنوان نام پوشه و StandardIpmFolder.Inbox به عنوان نوع پوشه.
- یک پیام ایمیل را از یک فایل با استفاده از متد ‘Load’ کلاس MapiMessage بارگذاری کنید و نام آن و یک نمونه از EmlLoadOptions را به عنوان پارامتر مشخص کنید.
- پیام ایمیل بارگذاری شده را به پوشه Inbox ایجاد شده قبلی در فایل 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” به پوشه Inbox اضافه میشود و برای دستکاری یا ذخیرهسازی بیشتر در دسترس قرار میگیرد.
وارد کردن چندین پیام EML به یک فایل PST
Aspose.Email این امکان را فراهم میکند که مجموعهای از پیامها را از یک پوشه به یک فایل PST اضافه کنید. متد AddMessages کلاس FolderInfo به شما اجازه میدهد تا بیش از یک پیام EML را به پوشه Inbox در یک فایل ذخیرهسازی وارد کنید. نمونه کد زیر به شما نشان میدهد که چگونه این ویژگی را به پروژه خود پیادهسازی کنید:
- یک فایل ذخیرهسازی شخصی جدید ایجاد کنید با استفاده از متد Create کلاس PersonalStorage که نام فایل و نسخه فرمت را به عنوان پارامتر مشخص میکند.
- یک پوشه “Inbox” پیشفرض در فایل PST با استفاده از متد CreatePredefinedFolder کلاس PersonalStorage ایجاد کنید، با مشخص کردن “Inbox” به عنوان نام پوشه و StandardIpmFolder.Inbox به عنوان نوع پوشه.
- یک یا چند پیام ایمیل را از یک پوشه به پوشه 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’ و ‘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 فراهم میکند و این فرآیند را کارآمد و ساده میسازد. با نمونههای کد بصری و مستندات جامع، توسعهدهندگان میتوانند به راحتی این قابلیت اساسی را به پروژههای خود پیادهسازی کنند. علاوه بر این، انجمن رایگان یک سیستم پشتیبانی مبتنی بر جامعه برای هرگونه سؤال یا مشکلی که ممکن است در حین پیادهسازی پیش آید، ارائه میدهد. برای کسب اطلاعات بیشتر در مورد ویژگیهای بالای کد API، لطفاً به منابع مرجع ما مراجعه کنید.