จัดการไฟล์แนบอีเมลและออบเจกต์ที่ฝังใน C#

จัดการไฟล์แนบอีเมล

ไฟล์แนบของอีเมลคือไฟล์ที่ส่งพร้อมกับข้อความอีเมล ไฟล์อาจถูกส่งเป็นข้อความแยกหรือเป็นส่วนหนึ่งของข้อความที่แนบอยู่ Attachment คลาสใช้ร่วมกับ MailMessage คลาส ข้อความทั้งหมดมีส่วนเนื้อหา นอกจากเนื้อหาแล้วคุณอาจต้องการส่งไฟล์เพิ่มเติม ซึ่งจะส่งเป็นไฟล์แนบและเป็นอินสแตนซ์ของ Attachment คลาส คุณสามารถส่งไฟล์แนบจำนวนไม่จำกัด แต่ขนาดไฟล์แนบจะถูกจำกัดโดยเซิร์ฟเวอร์เมล ตัวอย่างเช่น Gmail ไม่รองรับไฟล์ขนาดเกิน 10MB

เพิ่มไฟล์แนบ

เพื่อเพิ่มไฟล์แนบในอีเมล โปรดทำตามขั้นตอนต่อไปนี้:

  1. สร้างอินสแตนซ์ของ MailMessage คลาส.
  2. สร้างอินสแตนซ์ของ Attachment คลาส.
  3. โหลดไฟล์แนบเข้าสู่ Attachment อินสแตนซ์
  4. เพิ่ม Attachment อินสแตนซ์เข้าสู่ MailMessage อินสแตนซ์

โค้ดสแนปเป็ทต่อไปนี้แสดงวิธีการเพิ่มไฟล์แนบไปยังอีเมล.

// Create an instance of MailMessage class
var eml = new MailMessage
{
    From = "sender@from.com",
    To = "receiver@to.com",
    Subject = "This is message",
    Body = "This is body"
};

// Load an attachment
var attachment = new Attachment("1.txt");

// Add Multiple Attachment in instance of MailMessage class and Save message to disk
eml.Attachments.Add(attachment);

eml.AddAttachment(new Attachment("1.jpg"));
eml.AddAttachment(new Attachment("1.doc"));
eml.AddAttachment(new Attachment("1.rar"));
eml.AddAttachment(new Attachment("1.pdf"));
eml.Save("AddAttachments.eml");

ข้างต้นเราได้อธิบายวิธีการเพิ่มไฟล์แนบไปยังข้อความอีเมลของคุณด้วย Aspose.Email ส่วนต่อไปนี้จะแสดงวิธีการลบไฟล์แนบและแสดงข้อมูลเกี่ยวกับไฟล์แนบบนหน้าจอ.

เพิ่มไฟล์แนบอ้างอิง

ไฟล์แนบอ้างอิงเป็นประเภทของไฟล์แนบที่รวมลิงก์หรือการอ้างอิงถึงไฟล์หรือรายการหนึ่งแทนที่จะรวมไฟล์หรือรายการนั้นเองในข้อความอีเมล เมื่อผู้รับอีเมลคลิกที่ไฟล์แนบอ้างอิง พวกเขาจะสามารถเข้าถึงไฟล์ที่เชื่อมโยงได้ หากมีสิทธิ์ที่เหมาะสม การใช้ไฟล์แนบอ้างอิงช่วยให้คุณส่งข้อความอีเมลที่มีขนาดเล็กลงและทำให้ทุกคนเข้าถึงเวอร์ชันล่าสุดของไฟล์หรือรายการนั้นได้

โค้ดสแนปด้านล่างแสดงวิธีเพิ่มไฟล์แนบอ้างอิงเข้าสู่ข้อความอีเมล โค้ดดำเนินการตามขั้นตอนต่อไปนี้:

  1. โหลดไฟล์ข้อความอีเมลโดยใช้ MailMessage.Load() เมธอด.
  2. สร้างอ็อบเจ็กต์ ReferenceAttachment ใหม่ชื่อ refAttach โดยส่ง URL ของไฟล์แนบ "https://[attach_uri]" เป็นพารามิเตอร์ให้กับคอนสตรัคเตอร์ของมัน.
  3. ตั้งชื่อไฟล์แนบเป็น "Document.docx" โดยใช้ Name คุณสมบัติของอ็อบเจกต์ refAttach
  4. กำหนดประเภทผู้ให้บริการของไฟล์แนบเป็น AttachmentProviderType.OneDrivePro โดยใช้ ProviderType คุณสมบัติของอ็อบเจกต์ refAttach
  5. กำหนดประเภทสิทธิ์ของไฟล์แนบเป็น AttachmentPermissionType.AnyoneCanEdit โดยใช้ PermissionType คุณสมบัติของอ็อบเจกต์ refAttach
  6. เพิ่มอ็อบเจกต์ refAttach ไปยัง ไฟล์แนบ คอลเลกชันของอ็อบเจกต์ eml โดยใช้ Add() เมธอด.
var eml = MailMessage.Load("fileName");

var refAttach = new ReferenceAttachment("https://[attach_uri]")
{
    Name = "Document.docx",
    ProviderType = AttachmentProviderType.OneDrivePro,
    PermissionType = AttachmentPermissionType.AnyoneCanEdit
};

eml.Attachments.Add(refAttach);

ลบไฟล์แนบ

เพื่อทำการลบไฟล์แนบ ให้ทำตามขั้นตอนด้านล่าง:

  • สร้างอินสแตนซ์ของ Attachment คลาส.
  • โหลดไฟล์แนบในอินสแตนซ์ของ Attachment คลาส.
  • เพิ่มไฟล์แนบเข้าสู่อินสแตนซ์ของ MailMessage คลาส.
  • ลบไฟล์แนบจากอินสแตนซ์ของ Attachment คลาสโดยใช้ MailMessage อินสแตนซ์ของคลาส.

โค้ดสแนปเป็ทต่อไปนี้แสดงวิธีการลบไฟล์แนบ.

// Create an instance of MailMessage class
var eml = new MailMessage {From = "sender@sender.com", To = "receiver@gmail.com"};

// Load an attachment
var attachment = new Attachment("1.txt");
eml.Attachments.Add(attachment);

// Remove attachment from your MailMessage
eml.Attachments.Remove(attachment);

แสดงชื่อไฟล์แนบ

เพื่อแสดงชื่อไฟล์แนบ ให้ทำตามขั้นตอนต่อไปนี้:

  1. วนลูปไฟล์แนบในข้อความอีเมลและบันทึกแต่ละไฟล์แนบ
  2. แสดงชื่อไฟล์แนบแต่ละไฟล์บนหน้าจอ.

โค้ดสแนปเป็ทต่อไปนี้แสดงวิธีการแสดงชื่อไฟล์แนบบนหน้าจอ.

var eml = MailMessage.Load("Attachments.eml");

foreach (var attachment in eml.Attachments)
{
    // Display the the attachment file name
    Console.WriteLine(attachment.Name);
}

แยกไฟล์แนบอีเมล

หัวข้อนี้อธิบายวิธีการดึงไฟล์แนบจากไฟล์อีเมล ไฟล์แนบของอีเมลคือไฟล์ที่ส่งพร้อมกับข้อความอีเมล ไฟล์อาจถูกส่งเป็นข้อความแยกต่างหากหรือเป็นส่วนของข้อความที่แนบไว้ ทุกข้อความอีเมลมีตัวเลือกในการส่งไฟล์เพิ่มเติม ไฟล์เหล่านี้ถูกส่งเป็นไฟล์แนบและแสดงเป็นอินสแตนซ์ของ Attachment คลาส. เมธอด Attachment คลาสใช้ร่วมกับ MailMessage คลาสสำหรับทำงานกับไฟล์แนบ เพื่อดึงไฟล์แนบจากข้อความอีเมล ให้ทำตามขั้นตอนต่อไปนี้:

  • สร้างอินสแตนซ์ของ MailMessage คลาส.
  • โหลดไฟล์อีเมลเข้าสู่ MailMessage อินสแตนซ์
  • สร้างอินสแตนซ์ของ Attachment คลาสและใช้ในลูปเพื่อดึงไฟล์แนบทั้งหมด
  • บันทึกไฟล์แนบและแสดงบนหน้าจอ.

|ไฟล์แนบที่ดึงจากอีเมล| | :- | |todo:image_alt_text| โค้ดตัวอย่างต่อไปนี้แสดงวิธีแยกไฟล์แนบอีเมล

var eml = MailMessage.Load("Message.eml", new MsgLoadOptions());

foreach (var attachment in eml.Attachments)
{
    attachment.Save("MessageEmbedded_out.eml");
    Console.WriteLine(attachment.Name);
}

ดึง Content-Description จากไฟล์แนบ

Aspose.Email API มีความสามารถในการอ่าน Content-Description ของไฟล์แนบจากส่วนหัวของไฟล์แนบ โค้ดตัวอย่างต่อไปนี้แสดงวิธีดึงคำอธิบายเนื้อหาจากไฟล์แนบ

var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");
Console.WriteLine(eml.Attachments[0].Headers["Content-Description"]);

ระบุข้อความที่ฝัง

โค้ดสแนปเป็ทต่อไปนี้แสดงวิธีการตรวจสอบว่าไฟล์แนบเป็นข้อความที่ฝังอยู่หรือไม่.

var eml = MailMessage.Load("EmailWithAttachEmbedded.eml");

Console.WriteLine(eml.Attachments[0].IsEmbeddedMessage
    ? "Attachment is an embedded message."
    : "Attachment isn't an embedded message.");

ดึงไฟล์แนบจากอีเมลที่ลงนาม

อีเมลที่ลงลายเซ็นมีไฟล์แนบ smime.p7m เพียงไฟล์เดียว ซึ่งหมายความว่าอีเมลถูกเข้ารหัสด้วย SMIME ฟอร์แมตไฟล์ smime.p7m คือลายเซ็นดิจิทัล เพื่อดูเนื้อหาอีเมลนี้ใช้ RemoveSignature เมธอด เมธอดนี้คืนค่า MailMessage อ็อบเจ็กต์โดยไม่มีลายเซ็นดิจิทัล

var signedEml = MailMessage.Load("signed.eml");
        
if (signedEml.IsSigned)
{
    for (var i = 0; i < signedEml.Attachments.Count; i++)
    {
        Console.WriteLine($@"Signed email attachment{i}: {signedEml.Attachments[i].Name}");
    }
    
    // The email is signed. Remove a signature.
    var eml = signedEml.RemoveSignature();
    
    Console.WriteLine(@"Signature removed.");

    for (var i = 0; i < eml.Attachments.Count; i++)
    {
        Console.WriteLine($@"Email attachment{i}: {eml.Attachments[i].Name}");
    }
}

การจัดการภาพในบรรทัด

เพิ่มภาพในบรรทัดในเนื้อหาอีเมล

นี้ LinkedResource คลาสใช้ร่วมกับ MailMessage คลาสสำหรับฝังออบเจกต์ในข้อความอีเมลของคุณ เพื่อเพิ่มออบเจกต์ที่ฝัง ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างอินสแตนซ์ของ MailMessage คลาส.
  2. ระบุค่าจาก, ถึงและหัวเรื่องใน MailMessage อินสแตนซ์
  3. สร้างอินสแตนซ์ของ AlternateView คลาส.
  4. สร้างอินสแตนซ์ของ LinkedResource คลาส.
  5. โหลดวัตถุที่ฝังเข้าไปใน LinkedResourceCollection.
  6. เพิ่มวัตถุที่ฝังที่โหลดแล้วเข้าไปใน MailMessage อินสแตนซ์ของคลาส.
  7. เพิ่ม AlternateView อินสแตนซ์ของ MailMessage อินสแตนซ์ของคลาส.

โค้ดสแนปเป็ทด้านล่างสร้างข้อความอีเมลที่มีส่วนข้อความธรรมดาและ HTML รวมทั้งภาพที่ฝังอยู่ใน HTML

|รูปภาพที่ฝังอยู่ในอีเมล| | :- | |todo:image_alt_text| คุณสามารถส่งวัตถุที่ฝังอยู่ได้จำนวนไม่จำกัด ขนาดของไฟล์แนบถูกจำกัดโดยเซิร์ฟเวอร์เมล ตัวอย่างเช่น Gmail ไม่รองรับไฟล์ที่มีขนาดเกิน 10MB โค้ดสแนปเป็ทด้านล่างแสดงวิธีการฝังวัตถุลงในอีเมล.

var eml = new MailMessage
{
    From = "AndrewIrwin@from.com",
    To = "SusanMarc@to.com",
    Subject = "This is an email"
};

// Create the plain text part It is viewable by those clients that don't support HTML
var plainView =
    AlternateView.CreateAlternateViewFromString("This is my plain text content", null, "text/plain");

// Create the HTML part.To embed images, we need to use the prefix 'cid' in the img src value.
// The cid value will map to the Content-Id of a Linked resource. Thus <img src='cid:barcode'>
// will map to a LinkedResource with a ContentId of 'barcode'.
var htmlView =
    AlternateView.CreateAlternateViewFromString("Here is an embedded image.<img src=cid:barcode>", null,
        "text/html");

// Create the LinkedResource (embedded image) and Add the LinkedResource to the appropriate view
var barcode = new LinkedResource("1.jpg", MediaTypeNames.Image.Jpeg)
{
    ContentId = "barcode"
};

eml.LinkedResources.Add(barcode);
eml.AlternateViews.Add(plainView);
eml.AlternateViews.Add(htmlView);

eml.Save("EmbeddedImage_out.msg", SaveOptions.DefaultMsgUnicode);

ลบภาพในบรรทัดจากเนื้อหาอีเมล

LinkedResourceCollection เข้าถึงผ่าน MailMessage.LinkedResources คุณสมบัติ. The LinkedResourceCollection คอลเลกชันนี้ให้วิธีการเพื่อลบวัตถุที่ฝังอยู่ทั้งหมดที่ถูกเพิ่มเข้าในข้อความอีเมล ใช้เวอร์ชันที่มีการโอเวอร์โหลดของ LinkedResourceCollection.RemoveAt วิธีการลบร่องรอยทั้งหมดของวัตถุที่ฝังอยู่จากข้อความอีเมล.

ตัวอย่างโค้ดด้านล่างแสดงวิธีการลบวัตถุที่ฝังอยู่จากข้อความอีเมล.

//Load the test message with Linked Resources
var eml = MailMessage.Load("EmlWithLinkedResources.eml");

//Remove a LinkedResource
eml.LinkedResources.RemoveAt(0, true);

//Now clear the Alternate View for linked Resources
eml.AlternateViews[0].LinkedResources.Clear(true);

การจัดการออบเจกต์ที่ฝัง

ออบเจกต์ที่ฝังคือออบเจกต์ที่สร้างด้วยแอปพลิเคชันหนึ่งและฝังอยู่ในเอกสารหรือไฟล์ที่สร้างโดยแอปพลิเคชันอื่น เช่น สเปรดชีต Microsoft Excel สามารถฝังเข้าในรายงาน Microsoft Word หรือไฟล์วิดีโอสามารถฝังเข้าในงานนำเสนอ Microsoft PowerPoint เมื่อไฟล์ถูกฝัง จะคงรูปแบบเดิมไว้ ไม่ได้แค่แทรกหรือวางลงในเอกสารอื่น เอกสารที่ฝังสามารถเปิดในแอปพลิเคชันต้นฉบับและแก้ไขได้

ดึงออบเจกต์ที่ฝัง

หัวข้อนี้อธิบายวิธีดึงออบเจกต์ที่ฝังอยู่จากไฟล์อีเมล เอกสารที่ฝังสามารถเปิดในแอปพลิเคชันต้นฉบับและแก้ไขได้ เพื่อดึงออบเจกต์ที่ฝังจากข้อความอีเมล ให้ทำตามขั้นตอนต่อไปนี้:

  1. สร้างอินสแตนซ์ของ MailMessage คลาส.
  2. โหลดไฟล์อีเมลใน MailMessage อินสแตนซ์
  3. สร้างลูปแล้วสร้างอินสแตนซ์ของ Attachment คลาสในนั้น.
  4. บันทึกไฟล์แนบและแสดงบนหน้าจอ.
  5. ระบุที่อยู่ของผู้ส่งและผู้รับใน MailMessage อินสแตนซ์
  6. ส่งอีเมลโดยใช้ SmtpClient คลาส.

โค้ดส่วนต่อไปนี้ดึงวัตถุฝังจากอีเมล

|วัตถุฝังที่ดึงออกจากอีเมล| | :- | |todo:image_alt_text| โค้ดส่วนต่อไปนี้แสดงวิธีดึงวัตถุฝัง

var eml = MailMessage.Load("Message.msg", new MsgLoadOptions());

foreach (var attachment in eml.Attachments)
{
    attachment.Save("MessageEmbedded_out.msg");
    Console.WriteLine(attachment.Name);
}

ดึงภาพเชื่อมโยงในอีเมล HTML

ดึงทรัพยากรภาพเชื่อมโยงจากส่วนเนื้อหา HTML ภายนอกและฝังลงในผลลัพธ์ HTML ด้วย Aspose.Email for .NET ตั้งค่า HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments ตั้งค่าเป็น True แล้วรูปภาพเชื่อมโยงและทรัพยากรอื่น ๆ ในส่วนเนื้อหา HTML จะถูกดึงออกและฝังกลับ สิ่งนี้ช่วยคงรูปลักษณ์เดิมของข้อความที่มีเนื้อหาเชื่อมโยง โค้ดตัวอย่างต่อไปนี้สาธิตวิธีโหลดข้อความอีเมล ดึงทรัพยากร HTML ภายนอกเป็นไฟล์แนบ จัดการเหตุการณ์การเรนเดอร์ทรัพยากรตามต้องการ จากนั้นบันทึกข้อความเป็นไฟล์ HTML โดยใช้ Aspose.Email for .NET

// Load the email message
var mailMessage = MailMessage.Load("input.eml");

// Set options to extract external HTML resources
var options = new HtmlSaveOptions();
options.ExtractHTMLBodyResourcesAsAttachments = true;

// Optional: Handle resource rendering events
options.ResourceHtmlRendering += (sender, e) =>
{
    Console.WriteLine(e.PathToResourceFile + " " + ((Attachment)sender).ContentId);
};

// Save the HTML representation of the email
mailMessage.Save("output.html", options);