Gerenciando Anexos de Mensagens

Manipulando Anexos no Outlook

Criando e Salvando Arquivos de Mensagem Outlook (MSG) explica como criar e salvar mensagens, e como criar arquivos MSG com anexos. Este artigo explica como gerenciar anexos do Microsoft Outlook com Aspose.Email. Anexos de um arquivo de mensagem são acessados e salvos no disco usando o MapiMessage classe Anexos propriedade. O Anexos propriedade é uma coleção do tipo MapiAttachmentCollection classe.

Verificar Tipo de Anexo (Inline ou Regular)

Anexos inline e regulares servem a propósitos diferentes. Anexos inline são integrados visualmente na mensagem de e‑mail e geralmente são imagens ou arquivos de mídia. Enquanto isso, anexos regulares são arquivos separados anexados ao e‑mail e podem incluir vários tipos de arquivos. O MapiAttachment.IsInline propriedade do MapiAttachment classe obtém um valor que indica se o anexo é embutido ou regular.

O exemplo de código a seguir extrai e exibe informações sobre cada anexo na MapiMessage carregada, incluindo seus nomes de exibição e se são anexos inline ou não.

var message = MapiMessage.Load(fileName);

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

Verificar Tipo de Anexo (IsReference)

O MapiAttachment classe inclui o IsReference propriedade que permite aos desenvolvedores identificar anexos de referência em uma mensagem. Com o exemplo de código a seguir, você pode verificar se um anexo é um anexo de referência:

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

Salvar Anexos de Arquivos MSG

Para salvar anexos de um arquivo MSG:

  1. Itere através do MapiAttachmentCollection coleção e obtenha os anexos individuais.
  2. Para salvar os anexos, chame o método Save() da classe MapiAttachment.

O trecho de código a seguir mostra como salvar anexos no disco local.

Extrair Anexos de Arquivos MSG Formatados em RTF

Para mensagens formatadas como RTF, o código a seguir pode ser usado para diferenciar e extrair anexos que são Inline ou aparecem como Ícone no corpo da mensagem. O trecho de código a seguir mostra como Identificar e Extrair um anexo incorporado de um MSG formatado como 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);
        }
    }
}

Obter Anexos de Mensagens de Correio Aninhadas

Anexos OLE incorporados também aparecem no MapiMessage coleção de anexos da classe. O exemplo de código a seguir analisa um arquivo de mensagem em busca de anexos de mensagem incorporados e o salva no disco. O MapiMessage O método estático FromProperties() da classe pode criar uma nova mensagem a partir de um anexo incorporado. O trecho de código a seguir mostra como obter anexos de mensagens de correio aninhadas.

Remover Anexos

A biblioteca Aspose Outlook fornece a funcionalidade de remover anexos de arquivos Microsoft Outlook Message (.msg):

  • Chame o método RemoveAttachments(). Ele recebe o caminho do arquivo de mensagem como parâmetro. É implementado como um método estático público, portanto você não precisa instanciar o objeto.

O trecho de código a seguir mostra como remover Anexos.

Você também pode chamar o MapiMessage método estático da classe DestroyAttachment(). Funciona mais rápido que RemoveAttachment(), porque o método RemoveAttachment() analisa o arquivo da mensagem.

Adicionar Anexos MSG

Uma mensagem do Outlook pode conter outras mensagens do Microsoft Outlook em anexos, seja como mensagens regulares ou incorporadas. O MapiAttachmentCollection fornece membros sobrecarregados do método Add para criar mensagens do Outlook com ambos os tipos de anexos.

Adicionar Anexos de Referência a MapiMessages

O ReferenceAttachmentOptions a classe simplifica a adição de anexos de referência encapsulando todas as propriedades necessárias em um único objeto.

Parâmetros de ReferenceAttachmentOptions:

  • sharedLink: Um link compartilhado totalmente qualificado para o anexo fornecido pelo serviço web que hospeda o arquivo.
  • url: A localização do arquivo ou URL do recurso.
  • providerName: O nome do provedor de anexo de referência (por exemplo, Google Drive, Dropbox).
  • Exemplo: Adicionando um Anexo de Referência com 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);

Incorporar Mensagens como Anexos

O trecho de código a seguir mostra como incorporar um anexo de arquivo MSG a uma mensagem.

Ler Mensagens Incorporadas a partir de Anexos

O trecho de código a seguir mostra como ler mensagens incorporadas a partir de anexos.

Inserindo e Substituindo Anexo

Aspose.Email API oferece a capacidade de inserir anexos em um índice específico na mensagem principal. Também oferece a funcionalidade de substituir o conteúdo de um anexo por outro anexo de mensagem.

Inserir Anexos em Locais Específicos

A API Aspose.Email fornece a capacidade de inserir um anexo MSG em um MSG pai usando o método Insert da MapiAttachmentCollection MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). O trecho de código a seguir mostra como inserir um anexo em um local específico.

Substituir Conteúdo do Anexo

Isso pode ser usado para substituir o conteúdo de anexos incorporados pelos novos usando o método Replace. No entanto, não pode ser usado para inserir um anexo com PR_ATTACH_NUM = 4 (por exemplo) na coleção com collection.Count = 2. O trecho de código a seguir mostra como substituir o conteúdo de um anexo.

Renomear Anexos em MapiMessage

É possível editar o valor da propriedade DisplayName nos anexos de MapiMessage.

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

Salvar Anexos de Mensagens Assinadas Digitalmente

Aspose.Email API oferece a capacidade de obter ou definir um valor que indica se a mensagem assinada em claro será decodificada.