Quản lý Tệp Đính Kèm Email và Đối Tượng Nhúng trong C#

Quản lý Tệp Đính Kèm Email

Tệp đính kèm email là một tệp được gửi cùng với tin nhắn email. Tệp có thể được gửi như một tin nhắn riêng biệt cũng như là một phần của tin nhắn mà nó được đính kèm. Attachment lớp được sử dụng với MailMessage lớp. Tất cả tin nhắn bao gồm phần thân. Ngoài phần thân, bạn có thể muốn gửi các tệp bổ sung. Những tệp này được gửi dưới dạng đính kèm và được đại diện bằng một thể hiện của Attachment lớp. Bạn có thể gửi bất kỳ số lượng tệp đính kèm nào nhưng kích thước của tệp đính kèm bị giới hạn bởi máy chủ mail. Gmail, ví dụ, không hỗ trợ tệp lớn hơn 10MB.

Thêm một Tệp Đính Kèm

Để thêm một tệp đính kèm vào email, vui lòng làm theo các bước sau:

  1. Tạo một đối tượng của MailMessage lớp.
  2. Tạo một đối tượng của Attachment lớp.
  3. Tải tệp đính kèm vào Attachment thể hiện.
  4. Thêm Attachment thể hiện vào MailMessage thể hiện.

Đoạn mã dưới đây cho bạn thấy cách thêm một tệp đính kèm vào email.

// 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");

Ở trên, chúng tôi đã mô tả cách thêm tệp đính kèm vào tin nhắn email của bạn với Aspose.Email. Tiếp theo là cách loại bỏ tệp đính kèm và hiển thị thông tin về chúng trên màn hình.

Thêm một Tệp Đính Kèm Tham Chiếu

Một tệp đính kèm tham chiếu là một loại tệp đính kèm bao gồm liên kết hoặc tham chiếu đến một tệp hoặc mục, thay vì bao gồm tệp hoặc mục đó trực tiếp trong tin nhắn email. Khi người nhận email nhấp vào tệp đính kèm tham chiếu, họ sẽ có thể truy cập tệp được liên kết nếu có quyền phù hợp. Bằng cách sử dụng tệp đính kèm tham chiếu, bạn có thể gửi một tin nhắn email nhỏ hơn và đảm bảo mọi người đều có quyền truy cập vào phiên bản mới nhất của tệp hoặc mục.

Đoạn mã dưới đây cho thấy cách thêm một tệp đính kèm tham chiếu vào email. Đoạn mã thực hiện các bước sau:

  1. Tải tệp tin tin nhắn email bằng cách sử dụng MailMessage.Load() phương thức.
  2. Tạo một đối tượng ReferenceAttachment mới có tên refAttach, truyền URL đính kèm "https://[attach_uri]" làm tham số cho hàm khởi tạo của nó.
  3. Đặt tên của tệp đính kèm thành "Document.docx" bằng cách sử dụng Tên thuộc tính của đối tượng refAttach.
  4. Đặt loại nhà cung cấp cho tệp đính kèm là AttachmentProviderType.OneDrivePro sử dụng ProviderType thuộc tính của đối tượng refAttach.
  5. Đặt loại quyền cho tệp đính kèm là AttachmentPermissionType.AnyoneCanEdit sử dụng PermissionType thuộc tính của đối tượng refAttach.
  6. Thêm đối tượng refAttach vào Tệp Đính Kèm bộ sưu tập của đối tượng eml sử dụng Add() phương thức.
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);

Xóa Tệp Đính Kèm

Để loại bỏ một tệp đính kèm, hãy thực hiện các bước dưới đây:

  • Tạo một thể hiện của Attachment lớp.
  • Tải tệp đính kèm trong thể hiện của Attachment lớp.
  • Thêm tệp đính kèm vào thể hiện của MailMessage lớp.
  • Xóa các tệp đính kèm khỏi thể hiện của Attachment lớp sử dụng MailMessage đối tượng lớp.

Đoạn mã dưới đây cho bạn thấy cách loại bỏ một tệp đính kèm.

// 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);

Hiển thị Tên Tệp Đính Kèm

Để hiển thị tên tệp đính kèm, thực hiện các bước sau:

  1. Duyệt qua các tệp đính kèm trong tin nhắn email và lưu mỗi tệp đính kèm.
  2. Hiển thị tên mỗi tệp đính kèm trên màn hình.

Đoạn mã dưới đây cho bạn thấy cách hiển thị tên tệp đính kèm trên màn hình.

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

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

Trích xuất Tệp Đính Kèm Email

Chủ đề này giải thích cách trích xuất một tệp đính kèm từ một tệp email. Tệp đính kèm email là một tệp được gửi kèm theo một tin nhắn email. Tệp có thể được gửi như một tin nhắn riêng biệt cũng như là một phần của tin nhắn mà nó được đính kèm. Tất cả các tin nhắn email đều có tùy chọn để gửi các tệp bổ sung. Các tệp này được gửi dưới dạng tệp đính kèm và được biểu thị như các thể hiện của Attachment lớp. Attachment lớp được sử dụng với MailMessage lớp để làm việc với các tệp đính kèm. Để trích xuất các tệp đính kèm từ một tin nhắn email, hãy thực hiện các bước sau:

  • Tạo một đối tượng của MailMessage lớp.
  • Tải một tệp email vào MailMessage thể hiện.
  • Tạo một đối tượng của Attachment lớp và sử dụng nó trong một vòng lặp để trích xuất tất cả các tệp đính kèm.
  • Lưu tệp đính kèm và hiển thị nó trên màn hình.

|Tệp đính kèm đã được trích xuất trong email| | :- | |todo:image_alt_text| Đoạn mã dưới đây cho bạn thấy cách trích xuất tệp đính kèm email.

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

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

Lấy Content-Description từ Tệp Đính Kèm

API Aspose.Email cung cấp khả năng đọc Content-Description của tệp đính kèm từ header tệp đính kèm. Đoạn mã dưới đây cho bạn thấy cách lấy mô tả nội dung từ tệp đính kèm.

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

Xác Định Tin Nhắn Nhúng

Đoạn mã dưới đây minh họa cách xác định liệu tệp đính kèm có phải là tin nhắn nhúng hay không.

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

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

Lấy Tệp Đính Kèm từ Email Đã Ký

Email đã ký chứa một tệp đính kèm smime.p7m duy nhất. Điều này có nghĩa là email được mã hoá bằng SMIME. Định dạng tệp smime.p7m là chữ ký số. Để xem nội dung của email này, sử dụng RemoveSignature phương thức. Phương thức trả về một MailMessage đối tượng không có chữ ký số.

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}");
    }
}

Xử lý Hình Ảnh Nội Tuyến

Thêm Hình Ảnh Nội Tuyến vào Phần Thân Email

Cái LinkedResource lớp được sử dụng với  MailMessage lớp để nhúng các đối tượng vào tin nhắn email của bạn. Để thêm một đối tượng nhúng, thực hiện các bước sau

  1. Tạo một đối tượng của MailMessage lớp.
  2. Xác định các giá trị từ, đến và chủ đề trong MailMessage thể hiện.
  3. Tạo một đối tượng của AlternateView lớp.
  4. Tạo một đối tượng của LinkedResource lớp.
  5. Tải một đối tượng nhúng vào LinkedResourceCollection.
  6. Thêm đối tượng nhúng đã tải vào MailMessage đối tượng lớp.
  7. Thêm AlternateView thể hiện tới MailMessage đối tượng lớp.

Các đoạn mã dưới đây tạo ra một tin nhắn email với cả phần thân văn bản thuần và HTML và một hình ảnh được nhúng vào HTML

|Hình ảnh nhúng vào email| | :- | |todo:image_alt_text| Bạn có thể gửi bất kỳ số lượng đối tượng nhúng nào. Kích thước của tệp đính kèm bị giới hạn bởi máy chủ thư. Gmail, chẳng hạn, không hỗ trợ tệp lớn hơn 10MB. Các đoạn mã dưới đây minh họa cách nhúng các đối tượng vào Email.

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);

Xóa Hình Ảnh Nội Tuyến khỏi Phần Thân Email

LinkedResourceCollection được truy cập qua MailMessage.LinkedResources thuộc tính. The LinkedResourceCollection bộ sưu tập cung cấp một phương thức để hoàn toàn loại bỏ các đối tượng nhúng được thêm vào tin nhắn email. Sử dụng phiên bản quá tải của LinkedResourceCollection.RemoveAt phương thức để loại bỏ mọi dấu vết của một đối tượng nhúng khỏi tin nhắn email.

Mã mẫu dưới đây cho thấy cách loại bỏ các đối tượng nhúng khỏi một tin nhắn email.

//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);

Xử lý Đối Tượng Nhúng

Đối tượng nhúng là một đối tượng được tạo bằng một ứng dụng và được chèn vào trong một tài liệu hoặc tệp do một ứng dụng khác tạo ra. Ví dụ, một bảng tính Microsoft Excel có thể được nhúng vào báo cáo Microsoft Word, hoặc một tệp video có thể được nhúng vào bản trình chiếu Microsoft PowerPoint. Khi một tệp được nhúng, thay vì chèn hoặc dán vào tài liệu khác, nó giữ nguyên định dạng gốc. Tài liệu nhúng có thể được mở trong ứng dụng gốc và được chỉnh sửa.

Trích xuất Đối Tượng Nhúng

Chủ đề này giải thích cách trích xuất các đối tượng nhúng từ một tệp email. Tài liệu nhúng có thể được mở trong ứng dụng gốc và được chỉnh sửa. Để trích xuất một đối tượng nhúng từ một tin nhắn email, thực hiện các bước sau:

  1. Tạo một đối tượng của MailMessage lớp.
  2. Tải tệp email trong MailMessage thể hiện.
  3. Tạo một vòng lặp và tạo một thể hiện của Attachment lớp trong đó.
  4. Lưu tệp đính kèm và hiển thị nó trên màn hình.
  5. Xác định địa chỉ người gửi và người nhận trong MailMessage thể hiện.
  6. Gửi email bằng cách sử dụng SmtpClient lớp.

Đoạn mã dưới đây trích xuất các đối tượng nhúng từ một email.

|Các đối tượng nhúng đã trích xuất trong email| | :- | |todo:image_alt_text| Đoạn mã sau cho bạn cách trích xuất các đối tượng nhúng.

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

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

Trích xuất Hình Ảnh Liên Kết trong Email HTML

Trích xuất các tài nguyên hình ảnh liên kết từ phần thân HTML ra ngoài và nhúng chúng vào đầu ra HTML bằng Aspose.Email cho .NET. Đặt HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments đặt thành True, và các hình ảnh liên kết cùng các tài nguyên khác trong phần thân HTML sẽ được trích xuất và nhúng. Điều này giúp bảo tồn giao diện gốc của các tin nhắn có nội dung liên kết. Đoạn mã mẫu dưới đây minh họa cách tải một tin nhắn email, trích xuất các tài nguyên HTML bên ngoài của nó thành tệp đính kèm, tùy chọn xử lý các sự kiện render tài nguyên, và sau đó lưu tin nhắn dưới dạng tệp HTML bằng Aspose.Email cho .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);