จัดการไฟล์แนบอีเมลและออบเจกต์ที่ฝังใน C#
จัดการไฟล์แนบอีเมล
ไฟล์แนบของอีเมลคือไฟล์ที่ส่งพร้อมกับข้อความอีเมล ไฟล์อาจถูกส่งเป็นข้อความแยกหรือเป็นส่วนหนึ่งของข้อความที่แนบอยู่ Attachment คลาสใช้ร่วมกับ MailMessage คลาส ข้อความทั้งหมดมีส่วนเนื้อหา นอกจากเนื้อหาแล้วคุณอาจต้องการส่งไฟล์เพิ่มเติม ซึ่งจะส่งเป็นไฟล์แนบและเป็นอินสแตนซ์ของ Attachment คลาส คุณสามารถส่งไฟล์แนบจำนวนไม่จำกัด แต่ขนาดไฟล์แนบจะถูกจำกัดโดยเซิร์ฟเวอร์เมล ตัวอย่างเช่น Gmail ไม่รองรับไฟล์ขนาดเกิน 10MB
ลองใช้ดู!
เพิ่มหรือลบไฟล์แนบอีเมลออนไลน์ด้วยบริการฟรี แอป Aspose.Email Editor.
เพิ่มไฟล์แนบ
เพื่อเพิ่มไฟล์แนบในอีเมล โปรดทำตามขั้นตอนต่อไปนี้:
- สร้างอินสแตนซ์ของ MailMessage คลาส.
- สร้างอินสแตนซ์ของ Attachment คลาส.
- โหลดไฟล์แนบเข้าสู่ Attachment อินสแตนซ์
- เพิ่ม 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 ส่วนต่อไปนี้จะแสดงวิธีการลบไฟล์แนบและแสดงข้อมูลเกี่ยวกับไฟล์แนบบนหน้าจอ.
เพิ่มไฟล์แนบอ้างอิง
ไฟล์แนบอ้างอิงเป็นประเภทของไฟล์แนบที่รวมลิงก์หรือการอ้างอิงถึงไฟล์หรือรายการหนึ่งแทนที่จะรวมไฟล์หรือรายการนั้นเองในข้อความอีเมล เมื่อผู้รับอีเมลคลิกที่ไฟล์แนบอ้างอิง พวกเขาจะสามารถเข้าถึงไฟล์ที่เชื่อมโยงได้ หากมีสิทธิ์ที่เหมาะสม การใช้ไฟล์แนบอ้างอิงช่วยให้คุณส่งข้อความอีเมลที่มีขนาดเล็กลงและทำให้ทุกคนเข้าถึงเวอร์ชันล่าสุดของไฟล์หรือรายการนั้นได้
โค้ดสแนปด้านล่างแสดงวิธีเพิ่มไฟล์แนบอ้างอิงเข้าสู่ข้อความอีเมล โค้ดดำเนินการตามขั้นตอนต่อไปนี้:
- โหลดไฟล์ข้อความอีเมลโดยใช้ MailMessage.Load() เมธอด.
- สร้างอ็อบเจ็กต์ ReferenceAttachment ใหม่ชื่อ refAttach โดยส่ง URL ของไฟล์แนบ "https://[attach_uri]" เป็นพารามิเตอร์ให้กับคอนสตรัคเตอร์ของมัน.
- ตั้งชื่อไฟล์แนบเป็น "Document.docx" โดยใช้ Name คุณสมบัติของอ็อบเจกต์ refAttach
- กำหนดประเภทผู้ให้บริการของไฟล์แนบเป็น AttachmentProviderType.OneDrivePro โดยใช้ ProviderType คุณสมบัติของอ็อบเจกต์ refAttach
- กำหนดประเภทสิทธิ์ของไฟล์แนบเป็น AttachmentPermissionType.AnyoneCanEdit โดยใช้ PermissionType คุณสมบัติของอ็อบเจกต์ refAttach
- เพิ่มอ็อบเจกต์ 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);
แสดงชื่อไฟล์แนบ
เพื่อแสดงชื่อไฟล์แนบ ให้ทำตามขั้นตอนต่อไปนี้:
- วนลูปไฟล์แนบในข้อความอีเมลและบันทึกแต่ละไฟล์แนบ
- แสดงชื่อไฟล์แนบแต่ละไฟล์บนหน้าจอ.
โค้ดสแนปเป็ทต่อไปนี้แสดงวิธีการแสดงชื่อไฟล์แนบบนหน้าจอ.
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 คลาสและใช้ในลูปเพื่อดึงไฟล์แนบทั้งหมด
- บันทึกไฟล์แนบและแสดงบนหน้าจอ.
|ไฟล์แนบที่ดึงจากอีเมล| | :- | |
| โค้ดตัวอย่างต่อไปนี้แสดงวิธีแยกไฟล์แนบอีเมล
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 คลาสสำหรับฝังออบเจกต์ในข้อความอีเมลของคุณ เพื่อเพิ่มออบเจกต์ที่ฝัง ให้ทำตามขั้นตอนต่อไปนี้
- สร้างอินสแตนซ์ของ MailMessage คลาส.
- ระบุค่าจาก, ถึงและหัวเรื่องใน MailMessage อินสแตนซ์
- สร้างอินสแตนซ์ของ AlternateView คลาส.
- สร้างอินสแตนซ์ของ LinkedResource คลาส.
- โหลดวัตถุที่ฝังเข้าไปใน LinkedResourceCollection.
- เพิ่มวัตถุที่ฝังที่โหลดแล้วเข้าไปใน MailMessage อินสแตนซ์ของคลาส.
- เพิ่ม AlternateView อินสแตนซ์ของ MailMessage อินสแตนซ์ของคลาส.
โค้ดสแนปเป็ทด้านล่างสร้างข้อความอีเมลที่มีส่วนข้อความธรรมดาและ HTML รวมทั้งภาพที่ฝังอยู่ใน HTML
|รูปภาพที่ฝังอยู่ในอีเมล| | :- | |
| คุณสามารถส่งวัตถุที่ฝังอยู่ได้จำนวนไม่จำกัด ขนาดของไฟล์แนบถูกจำกัดโดยเซิร์ฟเวอร์เมล ตัวอย่างเช่น 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 เมื่อไฟล์ถูกฝัง จะคงรูปแบบเดิมไว้ ไม่ได้แค่แทรกหรือวางลงในเอกสารอื่น เอกสารที่ฝังสามารถเปิดในแอปพลิเคชันต้นฉบับและแก้ไขได้
ดึงออบเจกต์ที่ฝัง
หัวข้อนี้อธิบายวิธีดึงออบเจกต์ที่ฝังอยู่จากไฟล์อีเมล เอกสารที่ฝังสามารถเปิดในแอปพลิเคชันต้นฉบับและแก้ไขได้ เพื่อดึงออบเจกต์ที่ฝังจากข้อความอีเมล ให้ทำตามขั้นตอนต่อไปนี้:
- สร้างอินสแตนซ์ของ MailMessage คลาส.
- โหลดไฟล์อีเมลใน MailMessage อินสแตนซ์
- สร้างลูปแล้วสร้างอินสแตนซ์ของ Attachment คลาสในนั้น.
- บันทึกไฟล์แนบและแสดงบนหน้าจอ.
- ระบุที่อยู่ของผู้ส่งและผู้รับใน MailMessage อินสแตนซ์
- ส่งอีเมลโดยใช้ SmtpClient คลาส.
โค้ดส่วนต่อไปนี้ดึงวัตถุฝังจากอีเมล
|วัตถุฝังที่ดึงออกจากอีเมล| | :- | |
| โค้ดส่วนต่อไปนี้แสดงวิธีดึงวัตถุฝัง
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);