Gestisci allegati email e oggetti incorporati in C#

Gestisci allegati email

Un allegato email è un file che viene inviato insieme a un messaggio email. Il file può essere inviato come messaggio separato così come parte del messaggio a cui è allegato. Il Attachment classe è usata con il MailMessage classe. Tutti i messaggi includono un corpo. Oltre al corpo, potresti voler inviare file aggiuntivi. Questi vengono inviati come allegati e sono rappresentati come un’istanza del Attachment classe. È possibile inviare un numero qualsiasi di allegati ma la dimensione dell’allegato è limitata dal server di posta. Gmail, ad esempio, non supporta file di dimensioni superiori a 10 MB.

Aggiungi un allegato

Per aggiungere un allegato a un’email, segui questi passaggi:

  1. Crea un’istanza di MailMessage classe.
  2. Crea un’istanza di Attachment classe.
  3. Carica l’allegato nella Attachment istanza.
  4. Aggiungi il/la Attachment istanza nel MailMessage istanza.

Il seguente snippet di codice ti mostra come aggiungere un allegato a un’email.

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

Sopra, abbiamo descritto come aggiungere allegati al tuo messaggio email con Aspose.Email. Quanto segue mostra come rimuovere gli allegati e visualizzare le informazioni su di essi sullo schermo.

Aggiungi un allegato di riferimento

Un allegato di riferimento è un tipo di allegato che include un collegamento o un riferimento a un file o elemento, invece di includere il file o l’elemento stesso nel messaggio email. Quando i destinatari dell’email cliccano sull’allegato di riferimento, potranno accedere al file collegato se possiedono le autorizzazioni appropriate. Utilizzando un allegato di riferimento, è possibile inviare un messaggio email più piccolo e garantire che tutti abbiano accesso alla versione più aggiornata del file o elemento.

Il frammento di codice qui sotto mostra come aggiungere un allegato di riferimento a un’email. Il codice esegue i seguenti passaggi:

  1. Carica il file del messaggio email usando il MailMessage.Load() metodo.
  2. Crea un nuovo oggetto ReferenceAttachment chiamato refAttach, passando l’URL dell’allegato "https://[attach_uri]" come parametro al suo costruttore.
  3. Imposta il nome dell’allegato su "Document.docx" utilizzando il Nome proprietà dell’oggetto refAttach.
  4. Imposta il tipo di provider dell’allegato su AttachmentProviderType.OneDrivePro usando il ProviderType proprietà dell’oggetto refAttach.
  5. Imposta il tipo di permesso dell’allegato su AttachmentPermissionType.AnyoneCanEdit usando il PermissionType proprietà dell’oggetto refAttach.
  6. Aggiunge l’oggetto refAttach al Allegati collezione dell’oggetto eml usando il Add() metodo.
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);

Rimuovi allegato

Per rimuovere un allegato, segui i passaggi indicati di seguito:

  • Crea un’istanza di Attachment classe.
  • Carica l’allegato nell’istanza di Attachment classe.
  • Aggiungi l’allegato all’istanza di MailMessage classe.
  • Rimuovi gli allegati dall’istanza di Attachment classe utilizzando il MailMessage istanza di classe.

Il seguente snippet di codice ti mostra come rimuovere un allegato.

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

Visualizza nome file allegato

Per visualizzare il nome file di un allegato, segui questi passaggi:

  1. Itera sugli allegati nel messaggio email e salva ogni allegato.
  2. Visualizza ogni nome di allegato sullo schermo.

Il seguente snippet di codice ti mostra come visualizzare il nome del file allegato sullo schermo.

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

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

Estrai allegati email

Questo argomento spiega come estrarre un allegato da un file email. Un allegato email è un file inviato insieme a un messaggio email. Il file può essere inviato come messaggio separato o come parte del messaggio a cui è allegato. Tutti i messaggi email includono un’opzione per inviare file aggiuntivi. Questi vengono inviati come allegati e sono rappresentati come istanze di Attachment classe. Il Attachment classe è usata con il MailMessage classe per lavorare con gli allegati. Per estrarre gli allegati da un messaggio email, segui questi passaggi:

  • Crea un’istanza di MailMessage classe.
  • Carica un file email nella MailMessage istanza.
  • Crea un’istanza di Attachment classe e usala in un ciclo per estrarre tutti gli allegati.
  • Salva l’allegato e visualizzalo sullo schermo.

|Allegati estratti nell’email| | :- | |todo:image_alt_text| Il seguente frammento di codice mostra come estrarre gli allegati email.

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

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

Recupera Content-Description dall’allegato

L’API Aspose.Email fornisce la capacità di leggere una Content-Description di un allegato dall’intestazione dell’allegato. Il seguente frammento di codice mostra come recuperare la descrizione del contenuto dall’allegato.

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

Identifica messaggi incorporati

Il seguente snippet di codice dimostra come determinare se l’allegato è un messaggio incorporato o meno.

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

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

Recupera allegati da email firmate

Le email firmate contengono un unico allegato smime.p7m. Ciò significa che l’email è crittografata tramite SMIME. Il formato file smime.p7m è la firma digitale. Per vedere il contenuto di questa email usa il RemoveSignature metodo. Il metodo restituisce un MailMessage oggetto senza firma digitale.

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

Gestione immagini inline

Aggiungi immagine inline al corpo dell’email

Il LinkedResource classe è usata con il MailMessage classe per incorporare oggetti nel tuo messaggio email. Per aggiungere un oggetto incorporato, segui questi passaggi

  1. Crea un’istanza di MailMessage classe.
  2. Specifica i valori da, a e oggetto in MailMessage istanza.
  3. Crea un’istanza di AlternateView classe.
  4. Crea un’istanza di LinkedResource classe.
  5. Carica un oggetto incorporato nella LinkedResourceCollection.
  6. Aggiungi l’oggetto incorporato caricato nella MailMessage istanza di classe.
  7. Aggiungi il/la AlternateView istanza al MailMessage istanza di classe.

Gli snippet di codice seguenti producono un messaggio email con corpi di testo semplice e HTML e un’immagine incorporata nell’HTML

|Immagine incorporata nell’email| | :- | |todo:image_alt_text| Puoi inviare un numero qualsiasi di oggetti incorporati. La dimensione dell’allegato è limitata dal server di posta. Gmail, ad esempio, non supporta file di dimensioni superiori a 10 MB. Gli snippet di codice seguenti mostrano come incorporare oggetti in un’email.

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

Rimuovi immagine inline dal corpo dell’email

LinkedResourceCollection acceso tramite MailMessage.LinkedResources proprietà. Il LinkedResourceCollection la collezione fornisce un metodo per rimuovere completamente gli oggetti incorporati aggiunti a un messaggio email. Usa la versione sovraccaricata di LinkedResourceCollection.RemoveAt metodo per rimuovere tutte le tracce di un oggetto incorporato da un messaggio email.

Il codice di esempio seguente mostra come rimuovere oggetti incorporati da un messaggio email.

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

Gestione oggetti incorporati

Un oggetto incorporato è un oggetto creato con un’applicazione e inserito all’interno di un documento o file creato da un’altra applicazione. Per esempio, un foglio di calcolo Microsoft Excel può essere incorporato in un report Microsoft Word, oppure un file video può essere incorporato in una presentazione Microsoft PowerPoint. Quando un file è incorporato, piuttosto che inserito o incollato in un altro documento, mantiene il suo formato originale. Il documento incorporato può essere aperto nell’applicazione originale e modificato.

Estrai oggetti incorporati

Questo argomento spiega come estrarre oggetti incorporati da un file email. Il documento incorporato può essere aperto nell’applicazione originale e modificato. Per estrarre un oggetto incorporato da un messaggio email, segui questi passaggi:

  1. Crea un’istanza di MailMessage classe.
  2. Carica un file email nel MailMessage istanza.
  3. Crea un ciclo e crea un’istanza della Attachment classe in esso.
  4. Salva l’allegato e visualizzalo sullo schermo.
  5. Specificare l’indirizzo del mittente e del destinatario nel MailMessage istanza.
  6. Invia email utilizzando il SmtpClient classe.

Il frammento di codice qui sotto estrae oggetti incorporati da un’email.

|Oggetti incorporati estratti nell’email| | :- | |todo:image_alt_text| Il seguente frammento di codice mostra come estrarre oggetti incorporati.

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

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

Estrai immagini collegate nelle email HTML

Estrai le risorse immagine collegate esternamente dal corpo HTML e incorporale nell’output HTML con Aspose.Email per .NET. Imposta HtmlSaveOptions.ExtractHTMLBodyResourcesAsAttachments a True, le immagini collegate e altre risorse nel corpo HTML verranno estratte e incorporate. Questo aiuta a preservare l’aspetto originale dei messaggi con contenuti collegati. Il seguente esempio di codice dimostra come caricare un messaggio email, estrarre le sue risorse HTML esterne come allegati, gestire facoltativamente gli eventi di rendering delle risorse, e poi salvare il messaggio come file HTML usando Aspose.Email per .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);