Управление на имейл прикачени файлове и вградени обекти в C#

Управление на имейл прикачени файлове

Имейл прикаченият файл е файл, изпратен заедно с имейл съобщение. Файлът може да бъде изпратен като отделно съобщение, както и като част от съобщението, към което е прикачен. Attachment клас се използва с MailMessage клас. Всички съобщения включват тяло. В допълнение към тялото, може да искате да изпратите допълнителни файлове. Те се изпращат като прикачени файлове и се представят като екземпляр на Attachment клас. Можете да изпращате произволен брой прикачени файлове, но размерът им е ограничен от пощенския сървър. Gmail, например, не поддържа файлове по-големи от 10 MB.

Добавяне на прикачване

За да добавите прикачване към имейл, моля следвайте тези стъпки:

  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, например, не поддържа файлове по-големи от 10 MB. Примерите с код по-долу демонстрират как да вградите обекти в имейл.

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 за .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);