Керування вкладеннями листа та вбудованими об’єктами у C#

Керування вкладеннями листа

Вкладення електронного листа — це файл, який надсилається разом з повідомленням електронної пошти. Файл може бути надісланий як окреме повідомлення, так і як частина повідомлення, до якого він приєднаний. Attachment клас використовується з MailMessage клас. Усі повідомлення містять тіло. Окрім тіла, ви можете захотіти надіслати додаткові файли. Вони надсилаються як вкладення і представлені у вигляді екземпляра Attachment клас. Ви можете надсилати будь-яку кількість вкладень, проте розмір вкладення обмежується поштовим сервером. Gmail, наприклад, не підтримує файли розміром більше 10 МБ.

Додати вкладення

Щоб додати вкладення до листа, виконайте такі кроки:

  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 клас. The 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 з вкладення

API Aspose.Email забезпечує можливість читати 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}");
    }
}

Обробка вбудованих зображень

Додати вбудоване зображення до тіла листа

The LinkedResource клас використовується з MailMessage клас для вбудовування об’єктів у ваше повідомлення електронної пошти. Щоб додати вбудований об’єкт, виконайте наступні кроки

  1. Створіть екземпляр MailMessage клас.
  2. Вкажіть значення полів From, To та Subject у MailMessage екземпляр.
  3. Створіть екземпляр AlternateView клас.
  4. Створіть екземпляр LinkedResource клас.
  5. Завантажте вбудований об’єкт у LinkedResourceCollection.
  6. Додайте завантажений вбудований об’єкт у MailMessage екземпляр класу.
  7. Додайте AlternateView екземпляр до MailMessage екземпляр класу.

Нижче наведені фрагменти коду створюють повідомлення електронної пошти з простим текстом та HTML‑тілом, а також зображенням, вбудованим в HTML

|Зображення, вбудоване в електронний лист| | :- | |todo:image_alt_text| Ви можете надіслати будь-скільки вбудованих об’єктів. Розмір вкладення обмежений поштовим сервером. Наприклад, Gmail не підтримує файли розміром понад 10 МБ. Нижче наведені фрагменти коду, що демонструють, як вбудовувати об’єкти в електронний лист.

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 властивість. Цей 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 для .NET. Встановити HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments у True, і пов’язані зображення та інші ресурси у HTML‑тілі будуть вилучені та вбудовані. Це допомагає зберегти оригінальний вигляд листів з пов’язаним вмістом. Нижче наведений приклад коду демонструє, як завантажити лист, витягти його зовнішні HTML‑ресурси як вкладення, за потреби обробити події рендерингу ресурсів, а потім зберегти лист як HTML‑файл за допомогою Aspose.Email для .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);