วิธีทำงานกับไฟล์แนบใน C#
คู่มือนี้แสดงวิธีการเพิ่ม, อ่าน และแยกไฟล์แนบจากไฟล์ MSG โดยใช้ Aspose.Email FOSS สำหรับ .NET.
ขั้นตอนที่ 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