Správa e‑mailových příloh a vložených objektů v C#

Spravovat e‑mailové přílohy

Příloha e‑mailu je soubor, který je odeslán společně se zprávou e‑mail. Soubor může být odeslán jako samostatná zpráva i jako část zprávy, ke které je připojen. Attachment třída se používá s MailMessage třída. Všechny zprávy obsahují tělo. K tělu můžete chtít poslat i další soubory. Ty jsou odeslány jako přílohy a jsou reprezentovány jako instance třídy Attachment třída. Můžete odeslat libovolný počet příloh, ale velikost přílohy je omezena poštovním serverem. Gmail například nepodporuje soubory větší než 10 MB.

Přidat přílohu

Pro přidání přílohy k e‑mailu postupujte následovně:

  1. Vytvořte instanci MailMessage třída.
  2. Vytvořte instanci Attachment třída.
  3. Načtěte přílohu do Attachment instance.
  4. Přidejte Attachment instanci do MailMessage instance.

Následující úryvek kódu ukazuje, jak přidat přílohu k e‑mailu.

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

Výše jsme popsal, jak přidat přílohy k vaší e‑mailové zprávě pomocí Aspose.Email. Následující ukázka demonstruje, jak odebrat přílohy a zobrazit informace o nich na obrazovce.

Přidat referenční přílohu

Referenční příloha je typ přílohy, která obsahuje odkaz nebo referenci na soubor či položku, místo aby samotný soubor nebo položku zahrnovala v e‑mailové zprávě. Když příjemci e‑mailu kliknou na referenční přílohu, budou mít možnost k propojenému souboru přistupovat, pokud mají příslušná oprávnění. Použitím referenční přílohy můžete odeslat menší e‑mailovou zprávu a zajistit, že všichni mají přístup k nejnovější verzi souboru či položky.

Níže uvedený útržek kódu ukazuje, jak přidat referenční přílohu k e‑mailu. Kód provádí následující kroky:

  1. Načte soubor e‑mailové zprávy pomocí MailMessage.Load() metoda.
  2. Vytvoří nový objekt ReferenceAttachment s názvem refAttach a předá URL přílohy "https://[attach_uri]" jako parametr jeho konstruktoru.
  3. Nastaví název přílohy na "Document.docx" pomocí Name vlastnosti objektu refAttach.
  4. Nastavuje typ poskytovatele přílohy na AttachmentProviderType.OneDrivePro pomocí ProviderType vlastnosti objektu refAttach.
  5. Nastavuje typ oprávnění přílohy na AttachmentPermissionType.AnyoneCanEdit pomocí PermissionType vlastnosti objektu refAttach.
  6. Přidá objekt refAttach do Přílohy kolekci objektu eml pomocí Add() metoda.
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);

Odstranit přílohu

Pro odebrání přílohy postupujte podle níže uvedených kroků:

Následující úryvek kódu ukazuje, jak odebrat přílohu.

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

Zobrazit název souboru přílohy

Pro zobrazení názvu souboru přílohy postupujte následovně:

  1. Projděte přílohy v e‑mailové zprávě a uložte každou přílohu.
  2. Zobrazte název každé přílohy na obrazovce.

Následující úryvek kódu ukazuje, jak zobrazit název souboru přílohy na obrazovce.

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

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

Extrahovat e‑mailové přílohy

Tato kapitola vysvětluje, jak extrahovat přílohu ze souboru e‑mailu. E‑mailová příloha je soubor, který je odeslán spolu s e‑mailovou zprávou. Soubor může být odeslán jako samostatná zpráva i jako součást zprávy, ke které je připojen. Všechny e‑mailové zprávy mají možnost odeslat další soubory. Ty jsou odesílány jako přílohy a jsou reprezentovány jako instance Attachment třída. The Attachment třída se používá s MailMessage třídy pro práci s přílohami. Pro extrahování příloh z e‑mailové zprávy postupujte podle následujících kroků:

  • Vytvořte instanci MailMessage třída.
  • Načtěte soubor e‑mailu do MailMessage instance.
  • Vytvořte instanci Attachment třídu a použijte ji ve smyčce k extrahování všech příloh.
  • Uložte přílohu a zobrazte ji na obrazovce.

|Extrahované přílohy v e‑mailu| | :- | |todo:image_alt_text| Následující úryvek kódu ukazuje, jak extrahovat e‑mailové přílohy.

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

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

Načíst Content-Description z přílohy

API Aspose.Email poskytuje možnost číst Content-Description přílohy z hlavičky přílohy. Následující úryvek kódu ukazuje, jak načíst popis obsahu z přílohy.

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

Identifikovat vložené zprávy

Následující úryvek kódu demonstruje, jak určit, zda je příloha vložená zpráva či nikoli.

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

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

Načíst přílohy z podepsaných e‑mailů

Podepsané e‑maily obsahují jedinou přílohu smime.p7m. To znamená, že e‑mail je šifrován pomocí SMIME. Formát souboru smime.p7m představuje digitální podpis. Pro zobrazení obsahu tohoto e‑mailu použijte RemoveSignature metoda. Metoda vrací MailMessage objekt bez digitálního podpisu.

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

Zpracování vložených obrázků

Přidat vložený obrázek do těla e‑mailu

The LinkedResource třída se používá s MailMessage třída pro vkládání objektů do vaší e‑mailové zprávy. Pro přidání vloženého objektu postupujte následovně

  1. Vytvořte instanci MailMessage třída.
  2. Zadejte hodnoty From, To a Subject v MailMessage instance.
  3. Vytvořte instanci AlternateView třída.
  4. Vytvořte instanci LinkedResource třída.
  5. Načtěte vložený objekt do LinkedResourceCollection.
  6. Přidejte načtený vložený objekt do MailMessage instance třídy.
  7. Přidejte AlternateView instanci do MailMessage instance třídy.

Níže uvedené úryvky kódu vytvoří e‑mailovou zprávu s jak prostým textem, tak HTML tělem a obrázkem vloženým do HTML

|Obrázek vložený do e‑mailu| | :- | |todo:image_alt_text| Můžete odeslat libovolný počet vložených objektů. Velikost přílohy je omezena poštovním serverem. Gmail například nepodporuje soubory větší než 10 MB. Níže uvedené úryvky kódu demonstrují, jak vložit objekty do e‑mailu.

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

Odstranit vložený obrázek z těla e‑mailu

LinkedResourceCollection přístupná přes MailMessage.LinkedResources vlastnost. Ta LinkedResourceCollection kolekce poskytuje metodu k úplnému odebrání vložených objektů přidaných do e‑mailové zprávy. Použijte přetíženou verzi LinkedResourceCollection.RemoveAt metoda k odstranění všech stop vloženého objektu z e‑mailové zprávy.

Ukázkový kód níže ukazuje, jak odebrat vložené objekty z e‑mailové zprávy.

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

Zpracování vložených objektů

Vložený objekt je objekt, který byl vytvořen v jedné aplikaci a vložen do dokumentu nebo souboru vytvořeného v jiné aplikaci. Například tabulka Microsoft Excel může být vložena do zprávy Microsoft Word, nebo video soubor může být vložen do prezentace Microsoft PowerPoint. Když je soubor vložen, místo aby byl vložen či vložen (paste) do jiného dokumentu, zachovává svůj původní formát. Vložený dokument lze otevřít v původní aplikaci a upravit.

Extrahovat vložené objekty

Toto téma vysvětluje, jak extrahovat vložené objekty ze souboru e‑mailu. Vložený dokument lze otevřít v původní aplikaci a upravit. Pro extrahování vloženého objektu z e‑mailové zprávy postupujte následovně:

  1. Vytvořte instanci MailMessage třída.
  2. Načtěte soubor e‑mailu v MailMessage instance.
  3. Vytvořte smyčku a vytvořte instanci Attachment třída v ní.
  4. Uložte přílohu a zobrazte ji na obrazovce.
  5. Zadejte adresu odesílatele a příjemce v MailMessage instance.
  6. Odeslat e‑mail pomocí SmtpClient třída.

Níže uvedený úryvek kódu extrahuje vložené objekty z e‑mailu.

|Extrahované vložené objekty v e‑mailu| | :- | |todo:image_alt_text| Následující úryvek kódu ukazuje, jak extrahovat vložené objekty.

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

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

Extrahovat propojené obrázky v HTML e‑mailu

Extrahovat propojené obrázkové zdroje z HTML těla externě a vložit je do HTML výstupu s Aspose.Email pro .NET. Nastavte HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments na True a propojené obrázky a další zdroje v HTML těle budou extrahovány a vloženy. To pomáhá zachovat původní vzhled zpráv s propojeným obsahem. Následující ukázkový kód demonstruje, jak načíst e‑mailovou zprávu, extrahovat externí HTML zdroje jako přílohy, volitelně zpracovat události vykreslování zdrojů a poté zprávu uložit jako HTML soubor pomocí Aspose.Email pro .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);