كيفية العمل مع الارتباطات في C#

كيفية العمل مع الارتباطات في C#

هذا الدليل يظهر كيفية إضافة القراءة واستخراج المرفقات من ملفات MSG باستخدام Aspose.Email FOSS for .NET. File attachments, stream attachments, embedded messages, and inline image attachments are all covered using MapiAttachment.

الخطوة 1 - تثبيت الحزمة

dotnet add package Aspose.Email.FOSS

الخطوة 2 - إضافة ملفات الارتباط

using Aspose.Email.Foss.Msg;

var message = MapiMessage.Create("Report", "See attached files.");
message.SenderEmailAddress = "alice@example.com";
message.AddRecipient("bob@example.com", "Bob");

// From byte array
message.AddAttachment("report.pdf", File.ReadAllBytes("report.pdf"), "application/pdf");

// From stream
using var stream = File.OpenRead("photo.png");
message.AddAttachment("photo.png", stream, "image/png");

message.Save("with-attachments.msg");

الخطوة 3 - إضافة صور داخلية

استخدمها contentId معيار لدمج صورة مرجعية بواسطة جسم HTML:

var message = MapiMessage.Create("Newsletter", "");
message.HtmlBody = "<html><body><img src=\"cid:logo123\"></body></html>";

message.AddAttachment(
    "logo.png",
    File.ReadAllBytes("logo.png"),
    "image/png",
    "logo123");  // Content-ID matches cid: in HTML

message.Save("newsletter.msg");

الخطوة 4 - إدراج رسالة كإرفاق

قم بتوصيل MSG كرسالة مدمجة:

using var inner = MapiMessage.FromFile("original.msg");

var outer = MapiMessage.Create("Forwarded", "See the attached message.");
outer.AddEmbeddedMessageAttachment(inner, "original.msg", "application/vnd.ms-outlook");
outer.Save("forwarded.msg");

الخطوة 5 - قراءة واستخراج الملحقات

using var message = MapiMessage.FromFile("with-attachments.msg");

foreach (var attachment in message.Attachments)
{
    Console.WriteLine($"Name: {attachment.Filename}");
    Console.WriteLine($"MIME: {attachment.MimeType}");
    Console.WriteLine($"Size: {attachment.Data.Length} bytes");
    Console.WriteLine($"Embedded: {attachment.IsEmbeddedMessage}");
    Console.WriteLine($"Storage: {attachment.IsStorageAttachment}");

    if (attachment.IsEmbeddedMessage)
    {
        // Access the embedded message
        Console.WriteLine($"  Subject: {attachment.EmbeddedMessage!.Subject}");
    }
    else
    {
        // Save to disk
        File.WriteAllBytes(attachment.Filename!, attachment.Data);
    }
}

الخطوة 6 - القراءة القائمة على البث

استخدام OpenRead() لملصقات كبيرة لتجنب تحميل كل شيء في الذاكرة:

foreach (var attachment in message.Attachments)
{
    if (!attachment.IsEmbeddedMessage)
    {
        using var readStream = attachment.OpenRead();
        using var fileStream = File.Create(attachment.Filename!);
        readStream.CopyTo(fileStream);
    }
}

مثال كامل

using Aspose.Email.Foss.Msg;

// Create message with mixed attachments
var msg = MapiMessage.Create("Mixed Attachments", "Demo");
msg.SenderEmailAddress = "demo@example.com";
msg.AddRecipient("test@example.com", "Tester");

// File attachment
msg.AddAttachment("data.csv", File.ReadAllBytes("data.csv"), "text/csv");

// Embedded message
using var embedded = MapiMessage.FromFile("inner.msg");
msg.AddEmbeddedMessageAttachment(embedded, "inner.msg", "application/vnd.ms-outlook");

msg.Save("mixed.msg");
Console.WriteLine($"Attachments: {msg.Attachments.Count}"); // 2
 العربية