Hantera e‑mailbilagor och inbäddade objekt i C#

Hantera e‑mailbilagor

En e‑postbilaga är en fil som skickas tillsammans med ett e‑postmeddelande. Filen kan skickas som ett separat meddelande såväl som som en del av meddelandet den är bifogad till. Attachment klass används med MailMessage klass. Alla meddelanden innehåller en brödtext. Utöver brödtexten kan du vilja skicka ytterligare filer. Dessa skickas som bilagor och representeras som en instans av Attachment klass. Du kan skicka valfritt antal bilagor men storleken på bilagan begränsas av e‑postservern. Gmail, till exempel, stöder inte filer större än 10 MB.

Lägg till en bilaga

För att lägga till en bilaga i ett e‑postmeddelande, följ dessa steg:

  1. Skapa en instans av MailMessage klass.
  2. Skapa en instans av Attachment klass.
  3. Läs in bilagan i Attachment instans.
  4. Lägg till Attachment instans i MailMessage instans.

Följande kodsnutt visar hur du lägger till en bilaga i ett e‑postmeddelande.

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

Ovan beskrev vi hur man lägger till bilagor i ditt e‑postmeddelande med Aspose.Email. Nedan visas hur man tar bort bilagor och visar information om dem på skärmen.

Lägg till en referensbilaga

En referensbilaga är en typ av bilaga som innehåller en länk eller referens till en fil eller ett objekt, snarare än att själva filen eller objektet inkluderas i e‑postmeddelandet. När mottagarna av e‑posten klickar på referensbilagan kan de komma åt den länkade filen om de har rätt behörigheter. Genom att använda en referensbilaga kan du skicka ett mindre e‑postmeddelande och säkerställa att alla har åtkomst till den senaste versionen av filen eller objektet.

Kodsnutten nedan visar hur man lägger till en referensbilaga i ett e‑postmeddelande. Koden utför följande steg:

  1. Laddar e-postmeddelandefilen med hjälp av MailMessage.Load() metod.
  2. Skapar ett nytt ReferenceAttachment-objekt som heter refAttach och skickar med bilagans URL "https://[attach_uri]" som en parameter till dess konstruktor.
  3. Ställer in namn på bilagan till "Document.docx" med hjälp av Namn egenskapen för refAttach‑objektet.
  4. Ställer in leverantörstypen för bilagan till AttachmentProviderType.OneDrivePro med hjälp av ProviderType egenskapen för refAttach‑objektet.
  5. Ställer in behörighetstypen för bilagan till AttachmentPermissionType.AnyoneCanEdit med hjälp av PermissionType egenskapen för refAttach‑objektet.
  6. Lägger till refAttach‑objektet till Bilagor samling av eml-objektet med hjälp av Add() metod.
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);

Ta bort bilaga

För att ta bort en bilaga, följ stegen nedan:

Följande kodsnutt visar hur du tar bort en bilaga.

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

Visa bilagans filnamn

För att visa ett bilagans filnamn, följ dessa steg:

  1. Loopa igenom bilagorna i e‑mailmeddelandet och spara varje bilaga.
  2. Visa varje bilagsnamn på skärmen.

Följande kodsnutt visar hur du visar ett bilagsfilnamn på skärmen.

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

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

Extrahera e‑mailbilagor

Detta ämne förklarar hur man extraherar en bilaga från en e‑postfil. En e‑postbilaga är en fil som skickas tillsammans med ett e‑postmeddelande. Filen kan skickas som ett separat meddelande samt som en del av meddelandet den bifogas till. Alla e‑postmeddelanden har möjlighet att skicka ytterligare filer. Dessa skickas som bilagor och representeras som instanser av Attachment klass. Den Attachment klass används med MailMessage klass för att arbeta med bilagor. För att extrahera bilagor från ett e‑postmeddelande, följ dessa steg:

  • Skapa en instans av MailMessage klass.
  • Läs in en e‑postfil i MailMessage instans.
  • Skapa en instans av Attachment klass och använd den i en slinga för att extrahera alla bilagor.
  • Spara bilagan och visa den på skärmen.

|Extraherade bilagor i e‑post| | :- | |todo:image_alt_text| Följande kodsnutt visar hur du extraherar e‑mailbilagor.

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

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

Hämta Content-Description från bilaga

Aspose.Email‑API:n erbjuder möjligheten att läsa en bilagas Content-Description från en bilageheader. Följande kodsnutt visar hur du hämtar innehållsbeskrivningen från bilagan.

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

Identifiera inbäddade meddelanden

Följande kodsnutt demonstrerar hur man avgör om bilagan är ett inbäddat meddelande eller inte.

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

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

Hämta bilagor från signerade e‑mail

Signerade e‑postmeddelanden innehåller en enda smime.p7m‑bilaga. Det betyder att e‑posten är krypterad med SMIME. Smime.p7m‑filformatet är den digitala signaturen. För att se innehållet i detta e‑postmeddelande använd RemoveSignature metod. Metoden returnerar en MailMessage objekt utan digital signatur.

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

Hantera inbäddade bilder

Lägg till inbäddad bild i e‑mailkroppen

Den LinkedResource klass används med MailMessage klass för att bädda in objekt i ditt e‑mailmeddelande. För att lägga till ett inbäddat objekt, följ dessa steg

  1. Skapa en instans av MailMessage klass.
  2. Ange värdena för från, till och ämne i MailMessage instans.
  3. Skapa en instans av AlternateView klass.
  4. Skapa en instans av LinkedResource klass.
  5. Läs in ett inbäddat objekt i LinkedResourceCollection.
  6. Lägg till det inlästa inbäddade objektet i MailMessage klassinstans.
  7. Lägg till AlternateView instans till MailMessage klassinstans.

Kodsnuttarna nedan skapar ett e‑postmeddelande med både vanlig text och HTML‑kroppar samt en bild inbäddad i HTML‑kroppen.

|Bild inbäddad i e‑post| | :- | |todo:image_alt_text| Du kan skicka valfritt antal inbäddade objekt. Storleken på bilagan begränsas av e‑postservern. Gmail, till exempel, stödjer inte filer större än 10 MB. Kodsnuttarna nedan demonstrerar hur man bäddar in objekt i ett e‑postmeddelande.

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

Ta bort inbäddad bild från e‑mailkroppen

LinkedResourceCollection åtkoms via MailMessage.LinkedResources egenskapen. Den LinkedResourceCollection samlingen erbjuder en metod för att helt ta bort inbäddade objekt som lagts till i ett e‑postmeddelande. Använd den överlagrade versionen av LinkedResourceCollection.RemoveAt metod för att ta bort alla spår av ett inbäddat objekt från ett e‑postmeddelande.

Exempelkoden nedan visar hur man tar bort inbäddade objekt från ett e‑postmeddelande.

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

Hantera inbäddade objekt

Ett inbäddat objekt är ett objekt som skapats med ett program och inneslutits i ett dokument eller en fil som skapats av ett annat program. Till exempel kan ett Microsoft Excel‑kalkylblad bäddas in i en Microsoft Word‑rapport, eller en videofil kan bäddas in i en Microsoft PowerPoint‑presentation. När en fil är inbäddad, snarare än infogad eller klistrad in i ett annat dokument, behåller den sitt ursprungliga format. Det inbäddade dokumentet kan öppnas i originalapplikationen och modifieras.

Extrahera inbäddade objekt

Detta ämne förklarar hur man extraherar inbäddade objekt från en e‑mailfil. Det inbäddade dokumentet kan öppnas i originalapplikationen och modifieras. För att extrahera ett inbäddat objekt från ett e‑mailmeddelande, följ dessa steg:

  1. Skapa en instans av MailMessage klass.
  2. Läs in en e‑postfil i MailMessage instans.
  3. Skapa en slinga och skapa en instans av Attachment klass i den.
  4. Spara bilagan och visa den på skärmen.
  5. Ange avsändar- och mottagaradressen i MailMessage instans.
  6. Skicka e‑post med SmtpClient klass.

Kodsnutten nedan extraherar inbäddade objekt från ett e‑postmeddelande.

|Extraherade inbäddade objekt i e‑post| | :- | |todo:image_alt_text| Följande kodsnutt visar hur du extraherar inbäddade objekt.

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

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

Extrahera länkade bilder i HTML‑e‑mail

Extrahera länkade bildresurser externt från HTML‑kroppen och bädda in dem i HTML‑utdata med Aspose.Email för .NET. Ställ in HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments till True, och länkade bilder samt andra resurser i HTML‑kroppen kommer att extraheras och inbäddas. Detta hjälper till att bevara det ursprungliga utseendet på meddelanden med länkat innehåll. Följande kodexempel demonstrerar hur man laddar ett e‑mailmeddelande, extraherar dess externa HTML‑resurser som bilagor, valfritt hanterar resursskapande‑händelser, och sedan sparar meddelandet som en HTML‑fil med Aspose.Email för .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);