Gestione degli allegati del messaggio

Gestione degli allegati in Outlook

Creare e salvare file Outlook Message (MSG) spiega come creare e salvare messaggi, e come creare file MSG con allegati. Questo articolo spiega come gestire gli allegati di Microsoft Outlook con Aspose.Email. Gli allegati da un file di messaggio vengono acceduti e salvati su disco usando il MapiMessage classe Allegati proprietà. Il Allegati la proprietà è una collezione di tipo MapiAttachmentCollection classe.

Verifica tipo di allegato (In linea o Regolare)

Gli allegati in linea e quelli regolari hanno scopi diversi. Gli allegati in linea sono integrati visivamente nel messaggio di posta elettronica e sono tipicamente immagini o file multimediali. Nel frattempo, gli allegati regolari sono file separati allegati all’email e possono includere vari tipi di file. Il MapiAttachment.IsInline proprietà del MapiAttachment la classe ottiene un valore che indica se l’allegato è in linea o regolare.

Il seguente esempio di codice estrae e visualizza le informazioni su ciascun allegato nel MapiMessage caricato, inclusi i loro nomi visualizzati e se sono allegati in linea o meno.

var message = MapiMessage.Load(fileName);

foreach (var attach in message.Attachments)
{
    Console.WriteLine($"{attach.DisplayName0} : {attach.IsInline)}");
}

Verifica tipo di allegato (IsReference)

Il MapiAttachment la classe include il IsReference proprietà che consente agli sviluppatori di identificare gli allegati di riferimento in un messaggio. Con il seguente esempio di codice, è possibile verificare se un allegato è un allegato di riferimento:

foreach (var attachment in msg.Attachments)
{
    if (attachment.IsReference)
    {
        // Process reference attachment
    }
}

Salvare gli allegati da file MSG

Per salvare gli allegati da un file MSG:

  1. Iterare attraverso il MapiAttachmentCollection collezione e ottieni gli allegati individuali.
  2. Per salvare gli allegati, chiama il metodo Save() della classe MapiAttachment.

Il seguente frammento di codice mostra come salvare gli allegati sul disco locale.

Estrai gli allegati da file MSG formattati in RTF

Per i messaggi formattati in RTF, il codice seguente può essere usato per differenziare ed estrarre gli allegati che sono in linea o appaiono come icona nel corpo del messaggio. Il seguente frammento di codice mostra come identificare ed estrarre un allegato incorporato da un MSG formattato in RTF.


var eml = MapiMessage.Load("MSG file with RTF Formatting.msg");

foreach (var attachment in eml.Attachments)
{
    if (IsAttachmentInline(attachment))
    {
        try
        {
            SaveAttachment(attachment, Data.Out/new Guid().ToString());
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

static bool IsAttachmentInline(MapiAttachment attachment)
{
    foreach (var property in attachment.ObjectData.Properties.Values)
    {
        if (property.Name == "\x0003ObjInfo")
        {
            var odtPersist1 = BitConverter.ToUInt16(property.Data, 0);
            return (odtPersist1 & (1 << (7 - 1))) == 0;
        }
    }
    return false;
}

static void SaveAttachment(MapiAttachment attachment, string fileName)
{
    foreach (var property in attachment.ObjectData.Properties.Values)
    {
        if (property.Name == "Package")
        {
            using var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
            fs.Write(property.Data, 0, property.Data.Length);
        }
    }
}

Ottenere gli allegati di messaggi di posta nidificati

Gli allegati OLE incorporati compaiono anche nel MapiMessage collezione di classe Attachment. Il seguente esempio di codice analizza un file di messaggio per gli allegati di messaggi incorporati e lo salva su disco. Il MapiMessage Il metodo statico FromProperties() della classe può creare un nuovo messaggio da un allegato incorporato. Il seguente frammento di codice mostra come ottenere gli allegati di messaggi di posta nidificati.

Rimuovere allegati

La libreria Aspose Outlook fornisce la funzionalità per rimuovere gli allegati dai file Microsoft Outlook Message (.msg):

  • Chiama il metodo RemoveAttachments(). Accetta il percorso del file del messaggio come parametro. È implementato come metodo statico pubblico, quindi non è necessario istanziare l’oggetto.

Il seguente frammento di codice mostra come rimuovere gli allegati.

Puoi anche chiamare il MapiMessage metodo statico della classe DestroyAttachment(). Funziona più velocemente di RemoveAttachment(), perché il metodo RemoveAttachment() analizza il file del messaggio.

Aggiungere allegati MSG

Un messaggio Outlook può contenere altri messaggi Microsoft Outlook come allegati, sia come messaggi regolari sia incorporati. Il MapiAttachmentCollection fornisce membri overload del metodo Add per creare messaggi Outlook con entrambi i tipi di allegati.

Aggiungi allegati di riferimento a MapiMessages

Il ReferenceAttachmentOptions La classe semplifica l’aggiunta di allegati di riferimento incapsulando tutte le proprietà necessarie in un unico oggetto.

Parametri di ReferenceAttachmentOptions:

  • sharedLink: Un link condiviso completamente qualificato all’allegato fornito dal servizio web che ospita il file.
  • url: La posizione del file o l’URL della risorsa.
  • providerName: Il nome del provider dell’allegato di riferimento (es. Google Drive, Dropbox).
  • Esempio: Aggiunta di un allegato di riferimento con ReferenceAttachmentOptions
var options = new ReferenceAttachmentOptions(
    "https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
    "https://drive.google.com/drive/my-drive",
    "GoogleDrive");

// Add reference attachment
msg.Attachments.Add("Document.pdf", options);

Incorporare messaggi come allegati

Il seguente frammento di codice mostra come incorporare un allegato file MSG in un messaggio.

Leggere messaggi incorporati dagli allegati

Il seguente snippet di codice mostra come leggere i messaggi incorporati dagli allegati.

Inserimento e Sostituzione dell’Allegato

L’API Aspose.Email fornisce la possibilità di inserire allegati a un indice specifico nel messaggio genitore. Offre anche la possibilità di sostituire i contenuti di un allegato con un altro allegato di messaggio.

Inserire allegati in posizioni specifiche

L’API Aspose.Email fornisce la capacità di inserire un allegato MSG in un MSG genitore usando il metodo Insert della MapiAttachmentCollection MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). Il seguente frammento di codice mostra come inserire un allegato in una posizione specifica.

Sostituire i contenuti dell’allegato

Ciò può essere usato per sostituire i contenuti di un allegato incorporato con quelli nuovi usando il metodo Replace. Tuttavia, non può essere usato per inserire un allegato con PR_ATTACH_NUM = 4 (ad esempio) in una collezione con collection.Count = 2. Il frammento di codice seguente mostra come sostituire i contenuti di un allegato.

Rinomina gli allegati in MapiMessage

È possibile modificare il valore della proprietà DisplayName negli allegati MapiMessage.

var msg = MapiMessage.Load(fileName);
msg.Attachments[0].DisplayName = "New display name 1";
msg.Attachments[1].DisplayName = "New display name 2";

Salva gli allegati da messaggi firmati digitalmente

L’API Aspose.Email fornisce la possibilità di ottenere o impostare un valore che indica se il messaggio firmato in chiaro sarà decodificato.