مقدمة

إن إرسال رسائل البريد الإلكتروني ببرمجة هو متطلب شائع لأدوات الأرشيف، وأنابيب الامتثال، وأدواتها الهجرة. يستخدم ملفات Outlook MSG تنسيق الملفات الثنائية (CFB) حاوية مع تدفقات مملوكة لـ MAPI، في حين أن ملف EML يتبع معايير MIME.

Aspose.Email FOSS for .NET is a free, MIT-licensed C# library that provides a complete read-write API for MSG and EML messages. It targets .NET 8.0+ and has no dependency on Microsoft Outlook or any native COM interop layer. The library is available as the aspose.email.foss حزمة نوكيا.

يمر هذا المنشور من خلال قدرات الرسائل التي يتم تضمينها في المكتبة ، من تحميل الملفات خارج القرص إلى استخراج خصائص MAPI الفردية وتحويل بين التنسيقات.


ما هو مدرجة

تحميل ملفات MSG

وَالْمُتَّقِينَ MapiMessage يمكنك تحميل رسالة من مسار الملف أو تدفق، مع علامة التحقق الصارمة الاختيارية التي تظهر على أي مشاكل هيكلية وجدت في المجلد.

// Load an MSG file from disk
var message = MapiMessage.FromFile("meeting-invite.msg");

Console.WriteLine($"Subject: {message.Subject}");
Console.WriteLine($"From: {message.SenderName} <{message.SenderEmailAddress}>");
Console.WriteLine($"Date: {message.MessageDeliveryTime}");
Console.WriteLine($"Recipients: {message.Recipients.Count}");
Console.WriteLine($"Attachments: {message.Attachments.Count}");

عودة المولى MapiMessage - إظهار الخصائص المسمى للمناطق المشتركة بما في ذلك Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageId,و ، و MessageDeliveryTime.

تحميل رسائل EML

يتم استخدام ملفات EML في تنسيق MIME. MapiMessage.LoadFromEml يُقبل مسار الملف، أ Stream,أو أ byte[] ثم يعود إلى نفس MapiMessage الكائن، لذلك يمكنك استخدام واحد API موحدة بغض النظر عن تنسيق المصدر.

// Load from a file path
var fromFile = MapiMessage.LoadFromEml("newsletter.eml");

// Load from a stream
using var stream = File.OpenRead("newsletter.eml");
var fromStream = MapiMessage.LoadFromEml(stream);

Console.WriteLine($"Subject: {fromStream.Subject}");
Console.WriteLine($"Body: {fromStream.Body?.Trim()}");

يتعامل البراسر مع الرائحة المزودة، Base64 وبرمجيات نقل قابلة للطباعة، ومجالات متعددة المستقبل إلى / Cc.

العمل مع المقاييس والملحقات

بمجرد تحميل الرسالة ، تتوفر المستلمين والمرفقات كملفات قوية. MapiRecipient حملات EmailAddress, DisplayName,و ، و RecipientType كل مربع - كل MapiAttachment يقدم Filename, Data, MimeType,و ، و ContentId.

var message = MapiMessage.FromFile("report.msg");

foreach (var recipient in message.Recipients)
{
    Console.WriteLine($"  {recipient.DisplayName} <{recipient.EmailAddress}> (type={recipient.RecipientType})");
}

foreach (var attachment in message.Attachments)
{
    Console.WriteLine($"  {attachment.Filename} ({attachment.MimeType}, {attachment.Data.Length} bytes)");
    File.WriteAllBytes(attachment.Filename!, attachment.Data);
}

يتم دعم إرفاق الرسائل المدمجة أيضًا.عندما MapiAttachment.IsEmbeddedMessage هو true,وَالْمُسْلِمِينَ EmbeddedMessage الممتلكات تعيد عودة النعناع MapiMessage يمكنك إجراء فحص متكرر.

الوصول إلى ميزات MAPI

بالنسبة للمناظر الطبيعية المتقدمة، كل رسالة، المستلم، والملحق يظهر Properties جمع النوع MapiPropertyCollection.يمكنك قراءة وإضافة وإزالة خصائص MAPI الفردية باستخدام الهوية الخاصة بهم ورمز النموذج.

var message = MapiMessage.FromFile("custom-props.msg");

// Iterate all properties on the message
foreach (var prop in message.Properties.IterProperties())
{
    Console.WriteLine($"Tag: 0x{prop.PropertyTag:X8}, Value: {prop.Value}");
}

// Read a specific property
var subject = message.Properties.Get(
    (ushort)CommonMessagePropertyId.Subject,
    (ushort)PropertyTypeCode.PtypString);

وَالْمُتَّقِينَ CommonMessagePropertyId يحدد enum معرفات الممتلكات المعروفة MAPI للرسائل الأساسية ، ومجالات الجسم ، ورؤوس النقل ، وبيانات الميتا.

التحويل بين MSG و EML

يمكن حفظ رسالة مكسورة مرة أخرى في أي شكل. Save() يكتب ميكروويف، بينما SaveToEml() إنتاج MIME. وهذا يجعل تحويل النموذج سهلاً.

// Load an EML and save as MSG
var message = MapiMessage.LoadFromEml("incoming.eml");
message.Save("converted.msg");

// Load an MSG and save as EML
var msg = MapiMessage.FromFile("outgoing.msg");
msg.SaveToEml("exported.eml");

كلا الطريقتين يعتمدان على Stream معيار لمعالجة في الذاكرة دون لمس نظام الملفات.


بدء سريع

قم بتثبيت الحزمة من NuGet:

dotnet add package Aspose.Email.FOSS

ثم اكتب رسالتك الأولى:

using Aspose.Email.Foss.Msg;

// Load an MSG file
var message = MapiMessage.FromFile("sample.msg");

Console.WriteLine($"Subject:     {message.Subject}");
Console.WriteLine($"From:        {message.SenderName} <{message.SenderEmailAddress}>");
Console.WriteLine($"Date:        {message.MessageDeliveryTime}");
Console.WriteLine($"Body length: {message.Body?.Length ?? 0} chars");

// List attachments
foreach (var att in message.Attachments)
    Console.WriteLine($"  Attachment: {att.Filename} ({att.Data.Length} bytes)");

// Convert to EML
message.SaveToEml("sample.eml");
Console.WriteLine("Saved as EML.");

تنسيقات مدعومة

شكلالتمديدقراءةكتب
Outlook MSG.msgنعمنعم
MIME (EML).emlنعمنعم
ملف ثنائي الملفات.cfbنعمنعم

المصدر المفتوح و الترخيص

Aspose.Email FOSS for .NET is released under the MIT license. The full source code is available on GitHub at إرسال رسالة خاصة إلى: aspose-email-foss/Aspose.email-FOSS-for-.Net.مساهمات ومسائل وطلبات سحب موضع ترحيب.


بدءاً من