E‑mailbijlagen en ingebedde objecten beheren in C#

E‑mailbijlagen beheren

Een e‑mailbijlage is een bestand dat samen met een e‑mailbericht wordt verzonden. Het bestand kan als een apart bericht worden verzonden, maar ook als onderdeel van het bericht waaraan het is gekoppeld. De Attachment klasse wordt gebruikt met de MailMessage klasse. Alle berichten bevatten een body. Naast de body wilt u misschien extra bestanden versturen. Deze worden als bijlagen verzonden en worden weergegeven als een instantie van de Attachment klasse. U kunt een willekeurig aantal bijlagen verzenden, maar de grootte van de bijlage wordt beperkt door de mailserver. Gmail ondersteunt bijvoorbeeld geen bestanden groter dan 10 MB.

Voeg een bijlage toe

Volg de volgende stappen om een bijlage aan een e‑mail toe te voegen:

  1. Maak een instantie van de MailMessage klasse.
  2. Maak een instantie van de Attachment klasse.
  3. Laad bijlage in de Attachment instantie.
  4. Voeg de toe Attachment instantie in de MailMessage instantie.

Het volgende codefragment laat zien hoe een bijlage aan een e‑mail kan worden toegevoegd.

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

Bovenstaand hebben we uitgelegd hoe je bijlagen aan je e‑mailbericht kunt toevoegen met Aspose.Email. Hieronder wordt getoond hoe je bijlagen verwijdert en informatie over hen op het scherm weergeeft.

Voeg een referentiebijlage toe

Een referentiebijlage is een type bijlage dat een link of een referentie naar een bestand of item bevat, in plaats van het bestand of item zelf in het e‑mailbericht op te nemen. Wanneer de ontvangers van de e‑mail op de referentiebijlage klikken, kunnen ze toegang krijgen tot het gekoppelde bestand als ze over de juiste rechten beschikken. Door een referentiebijlage te gebruiken, kunt u een kleiner e‑mailbericht verzenden en er tegelijkertijd voor zorgen dat iedereen toegang heeft tot de meest recente versie van het bestand of item.

Het onderstaande codefragment laat zien hoe u een referentiebijlage aan een e‑mail kunt toevoegen. De code voert de volgende stappen uit:

  1. Laadt het e-mailberichtbestand met behulp van de MailMessage.Load() methode.
  2. Maakt een nieuw ReferenceAttachment-object genaamd refAttach aan, waarbij de bijlage-URL "https://[attach_uri]" als parameter aan de constructor wordt doorgegeven.
  3. Stelt de naam van de bijlage in op "Document.docx" met behulp van de Name eigenschap van het refAttach‑object.
  4. Stelt het providertype van de bijlage in op AttachmentProviderType.OneDrivePro met behulp van de ProviderType eigenschap van het refAttach‑object.
  5. Stelt het permissietype van de bijlage in op AttachmentPermissionType.AnyoneCanEdit met behulp van de PermissionType eigenschap van het refAttach‑object.
  6. Voegt het refAttach‑object toe aan de Bijlagen collectie van het eml‑object met behulp van de Add() methode.
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);

Bijlage verwijderen

Volg de onderstaande stappen om een bijlage te verwijderen:

  • Maak een instantie van Attachment klasse.
  • Laad de bijlage in de instantie van Attachment klasse.
  • Voeg de bijlage toe aan de instantie van MailMessage klasse.
  • Verwijder de bijlagen van de instantie van Attachment klasse met behulp van de MailMessage klasse‑instantie.

Het volgende codefragment laat zien hoe een bijlage kan worden verwijderd.

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

Bijlagebestandsnaam weergeven

Om de bestandsnaam van een bijlage weer te geven, volg deze stappen:

  1. Loop door de bijlagen in het e‑mailbericht en sla elke bijlage op.
  2. Geef elke bijlagenaam weer op het scherm.

Het volgende codefragment laat zien hoe een bestandsnaam van een bijlage op het scherm kan worden weergegeven.

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

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

E‑mailbijlagen extraheren

Dit onderwerp legt uit hoe een bijlage uit een e‑mailbestand kan worden geëxtraheerd. Een e‑mailbijlage is een bestand dat samen met een e‑mailbericht wordt verzonden. Het bestand kan zowel als afzonderlijk bericht als onderdeel van het bericht waaraan het is gekoppeld worden verzonden. Alle e‑mailberichten bieden een optie om extra bestanden te verzenden. Deze worden verzonden als bijlagen en worden weergegeven als instanties van de Attachment klasse. De Attachment klasse wordt gebruikt met de MailMessage klasse om met bijlagen te werken. Volg deze stappen om bijlagen uit een e‑mailbericht te extraheren:

  • Maak een instantie van de MailMessage klasse.
  • Laad een e‑mailbestand in de MailMessage instantie.
  • Maak een instantie van de Attachment klasse en gebruik deze in een lus om alle bijlagen te extraheren.
  • Sla de bijlage op en toon deze op het scherm.

|Geëxtraheerde bijlagen in e‑mail| | :- | |todo:image_alt_text| Het onderstaande code‑fragment laat zien hoe u e‑mailbijlagen extraheert.

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 van bijlage ophalen

Aspose.Email‑API biedt de mogelijkheid om de Content‑Description van een bijlage uit de bijlage‑header te lezen. Het onderstaande code‑fragment laat zien hoe u de content‑description van de bijlage kunt ophalen.

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

Ingebedde berichten identificeren

De volgende codefragment toont hoe kan worden vastgesteld of de bijlage een ingesloten bericht is of niet.

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

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

Bijlagen ophalen uit ondertekende e‑mails

Ondertekende e‑mails bevatten één smime.p7m‑bijlage. Dit betekent dat de e‑mail versleuteld is met SMIME. Het smime.p7m‑bestandsformaat is de digitale handtekening. Gebruik de RemoveSignature methode. De methode retourneert een MailMessage object zonder digitale handtekening.

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

Inline‑afbeeldingen verwerken

Inline‑afbeelding aan e‑mailbody toevoegen

De LinkedResource klasse wordt gebruikt met de MailMessage klasse om objecten in uw e‑mailbericht in te sluiten. Volg deze stappen om een ingebed object toe te voegen

  1. Maak een instantie van de MailMessage klasse.
  2. Geef de waarden voor van, aan en onderwerp op in MailMessage instantie.
  3. Maak een instantie van de AlternateView klasse.
  4. Maak een instantie van de LinkedResource klasse.
  5. Laad een ingesloten object in de LinkedResourceCollection.
  6. Voeg het geladen ingesloten object toe aan de MailMessage klasse‑instantie.
  7. Voeg de toe AlternateView instantie naar de MailMessage klasse‑instantie.

De codefragmenten hieronder genereren een e‑mailbericht met zowel platte‑tekst‑ als HTML‑inhoud en een afbeelding die in de HTML is ingesloten

|Afbeelding ingesloten in e‑mail| | :- | |todo:image_alt_text| Je kunt een willekeurig aantal ingesloten objecten verzenden. De grootte van de bijlage wordt beperkt door de e‑mailserver. Gmail ondersteunt bijvoorbeeld geen bestanden groter dan 10 MB. De codefragmenten hieronder tonen hoe objecten in een e‑mail kunnen worden ingesloten.

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

Inline‑afbeelding uit e‑mailbody verwijderen

LinkedResourceCollection toegankelijk via MailMessage.LinkedResources eigenschap. De LinkedResourceCollection collectie biedt een methode om ingesloten objecten die aan een e‑mailbericht zijn toegevoegd volledig te verwijderen. Gebruik de overladen versie van LinkedResourceCollection.RemoveAt methode om alle sporen van een ingesloten object uit een e‑mailbericht te verwijderen.

De voorbeeldcode hieronder toont hoe ingesloten objecten uit een e‑mailbericht kunnen worden verwijderd.

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

Ingebedde objecten verwerken

Een ingebed object is een object dat in één applicatie is gemaakt en vervolgens in een document of bestand van een andere applicatie is ingebed. Bijvoorbeeld, een Microsoft Excel‑werkblad kan worden ingebed in een Microsoft Word‑rapport, of een videobestand kan worden ingebed in een Microsoft PowerPoint‑presentatie. Wanneer een bestand wordt ingebed, in plaats van ingevoegd of geplakt in een ander document, behoudt het zijn oorspronkelijke formaat. Het ingebedde document kan worden geopend in de oorspronkelijke applicatie en aangepast.

Ingebedde objecten extraheren

Dit onderwerp legt uit hoe u ingebedde objecten uit een e‑mailbestand kunt extraheren. Het ingevoegde document kan worden geopend in de oorspronkelijke applicatie en worden aangepast. Volg deze stappen om een ingebed object uit een e‑mailbericht te extraheren:

  1. Maak een instantie van de MailMessage klasse.
  2. Laad een e-mailbestand in de MailMessage instantie.
  3. Maak een lus en maak een instantie van de Attachment klasse daarin.
  4. Sla de bijlage op en toon deze op het scherm.
  5. Geef het afzender- en ontvangeradres op in de MailMessage instantie.
  6. E-mail verzenden met de SmtpClient klasse.

Het onderstaande codefragment extraheert ingesloten objecten uit een e‑mail.

|Uitgevoerde ingesloten objecten in e‑mail| | :- | |todo:image_alt_text| Het volgende codefragment laat zien hoe u ingesloten objecten kunt extraheren.

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

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

Gekoppelde afbeeldingen in HTML‑e‑mails extraheren

Externe gekoppelde afbeeldingsresources uit de HTML‑body extraheren en in de HTML‑output invoegen met Aspose.Email voor .NET. Stel HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments op True, en gekoppelde afbeeldingen en andere resources in de HTML‑body worden geëxtraheerd en ingevoegd. Dit helpt de oorspronkelijke weergave van berichten met gekoppelde content te behouden. Het onderstaande code‑voorbeeld toont hoe u een e‑mailbericht laadt, externe HTML‑resources als bijlagen extraheert, optioneel resource‑render‑events afhandelt, en vervolgens het bericht opslaat als een HTML‑bestand met Aspose.Email voor .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);