Características e funcionalidades

Características e funcionalidades

Características e funcionalidades

Esta página abrange todas as principais características de: Aspose.Email FOSS for .NET com exemplos de C# em funcionamento.


Leitura de ficheiros MSG

Carregar um ficheiro MSG a partir de uma rota ou fluxo e acessar todas as suas propriedades:

using System.IO;
using Aspose.Email.Foss.Msg;

using var stream = File.OpenRead("message.msg");
var message = MapiMessage.FromStream(stream);

Console.WriteLine(message.Subject);
Console.WriteLine(message.Body);
Console.WriteLine(message.HtmlBody);
Console.WriteLine(message.SenderName);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.MessageDeliveryTime);
Console.WriteLine(message.InternetMessageId);

Utilização: strict: false para análise suave de ficheiros MSG não-padrão:

var message = MapiMessage.FromFile("message.msg", strict: false);

Verificação ValidationIssues Para rever quaisquer avisos de formato sem jogar:

foreach (var issue in message.ValidationIssues)
    Console.WriteLine($"Warning: {issue}");

Criar arquivos MSG

Criar um email completo com: MapiMessage.Create() e serializam com Save():

using System.IO;
using Aspose.Email.Foss.Msg;

var message = MapiMessage.Create("Hello", "Body");
message.SenderName = "Alice";
message.SenderEmailAddress = "alice@example.com";
message.HtmlBody = "<p>Body</p>";
message.InternetMessageId = "<hello@example.com>";
message.MessageDeliveryTime = new DateTime(2024, 1, 2, 3, 4, 5, DateTimeKind.Utc);

message.AddRecipient("bob@example.com", "Bob");

using var output = File.Create("hello.msg");
message.Save(output);

Save() sem argumentos retorna a byte[]. Save(path) escreve para um caminho de arquivo diretamente.


Beneficiários

Adicionar To, Cc, e Bcc beneficiários com: AddRecipient():

message.AddRecipient("alice@example.com", "Alice");
message.AddRecipient("bob@example.com", "Bob", MapiMessage.RecipientTypeCc);
message.AddRecipient("carol@example.com", "Carol", MapiMessage.RecipientTypeBcc);

Iterar destinatários de uma mensagem carregada:

foreach (var recipient in message.Recipients)
    Console.WriteLine($"{recipient.DisplayName} <{recipient.EmailAddress}>");

Anexos

Adicionar arquivo ou fluxo de anexos com metadados:

// From byte array
message.AddAttachment("report.pdf", pdfBytes, "application/pdf");

// From stream
using var attachStream = File.OpenRead("photo.png");
message.AddAttachment("photo.png", attachStream, "image/png");

// Inline image with Content-ID
message.AddAttachment("logo.png", logoBytes, "image/png", contentId: "logo@cid");

Leia anexos de uma mensagem carregada:

foreach (var attachment in message.Attachments)
{
    Console.WriteLine($"Filename: {attachment.Filename}");
    Console.WriteLine($"MIME type: {attachment.MimeType}");
    Console.WriteLine($"Size: {attachment.Data.Length} bytes");
    File.WriteAllBytes(attachment.Filename!, attachment.Data);
}

Anexos de mensagem incorporados

Anexar um . MapiMessage dentro de outro comum em cadeias de e-mail encaminhadas:

using Aspose.Email.Foss.Msg;

var parent = MapiMessage.Create("Outer", "Parent body");
var child = MapiMessage.Create("Inner", "Child body");
child.SenderEmailAddress = "inner@example.com";
parent.AddEmbeddedMessageAttachment(child, "inner.msg");

parent.Save("outer.msg");

Leia os anexos das mensagens incorporadas:

var loaded = MapiMessage.FromFile("outer.msg");
foreach (var attachment in loaded.Attachments)
{
    if (attachment.IsEmbeddedMessage)
    {
        Console.WriteLine($"Embedded: {attachment.EmbeddedMessage!.Subject}");
    }
}

Conversão EML e MIME

Carregar um RFC 5322 .eml Arquivo em um MapiMessage para armazenamento compatível com o Outlook:

using System.IO;
using Aspose.Email.Foss.Msg;

using var input = File.OpenRead("message.eml");
var message = MapiMessage.LoadFromEml(input);

using var msgOutput = File.Create("message.msg");
message.Save(msgOutput);

Converter de volta para EML a partir de um ficheiro MSG:

var message = MapiMessage.FromFile("message.msg");
using var emlOutput = File.Create("roundtrip.eml");
message.SaveToEml(emlOutput);

LoadFromEml() também aceita um string caminho ou byte[]. SaveToEml() sem argumentos. retorna um byte[]. Objeto, corpo, HTML corpo , remetente, destinatários e todos os anexos (incluindo imagens em linha com Content-ID) são conservados através de viagens completas EML MSG.


Acesso à propriedade MAPI

MapiPropertyCollection fornece acesso tipado às propriedades MAPI via SetProperty() e a) GetPropertyValue().- Usar . CommonMessagePropertyId Valores enum para propriedades padrão:

using Aspose.Email.Foss.Msg;

var message = MapiMessage.FromFile("sample.msg");

// Named convenience properties
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderName);
Console.WriteLine(message.MessageDeliveryTime);

// Iterate all MAPI property keys
foreach (var key in message.IterPropertyKeys())
    Console.WriteLine($"0x{(ushort)key.PropertyId:X4} / {key.PropertyType}");

Acesso ao contêiner CFB

Os arquivos MSG do Outlook são construídos no formato Compound File Binary (CFB). CfbReader exposições A árvore de diretório completa para inspeção e extracção de dados:

using System.Text;
using Aspose.Email.Foss.Cfb;

using var reader = CfbReader.FromFile("message.msg");

// Iterate all top-level children
foreach (var entry in reader.IterChildren(CfbConstants.RootStreamId))
    Console.WriteLine($"{(entry.IsStorage() ? "Storage" : "Stream")}: {entry.Name}");

// Navigate to a specific stream by path
var entry2 = reader.ResolvePath(["__substg1.0_0037001E"]);
if (entry2 is not null)
{
    var data = reader.GetStreamData(entry2.StreamId);
    Console.WriteLine(Encoding.Unicode.GetString(data));
}

Construir e serializar um documento CFB a partir do zero com CfbWriter:

using System.Text;
using Aspose.Email.Foss.Cfb;

var document = new CfbDocument();
document.Root.AddStream(new CfbStream("Notes", Encoding.UTF8.GetBytes("hello")));
var storage = document.Root.AddStorage(new CfbStorage("DataStore"));
storage.AddStream(new CfbStream("Payload", Encoding.UTF8.GetBytes("content")));

byte[] bytes = CfbWriter.ToBytes(document);
File.WriteAllBytes("output.cfb", bytes);

Dicas e melhores práticas

  • Utilização: using ou a) Dispose() em 1 de Setembro de MapiMessage e a) CfbReader para liberar os manobras de ficheiro
  • Verificação message.ValidationIssues após o carregamento para detectar a formatação não padrão de MSG;
  • A Comissão strict Parâmetro em: FromFile() / FromStream() Controlas de tolerância a erros utilização strict: false para análise suave de ficheiros provenientes de sistemas de terceiros
  • MapiMessage.Create() produz mensagens de cadeia Unicode por padrão; set unicodeStrings: false para compatibilidade com ANSI legado
  • SaveToEml() sem argumentos retorna byte[] conveniente para fluxos de trabalho em memória

Problemas comuns

EmissãoCausa da morteCorreção
CfbException quando a carga é efectuada.Não é um ficheiro CFB/MSG válido.Verificar se o arquivo é um Outlook MSG
Vazio. - Não . Body após cargaCorpo armazenado apenas em HTMLVerificação message.HtmlBody em vez disso .
Não encontrada constante de tipo do destinatárioNão é um tipo independente.Utilização: MapiMessage.RecipientTypeTo, MapiMessage.RecipientTypeCc, ou MapiMessage.RecipientTypeBcc
0 attachments after LoadFromEmlEML não tem Content-Disposition: attachment peçasAs partes em linha (apenas o ID do conteúdo) também aparecem no código-fonte. Attachments

Resumo de referência da API

Classe:Descrição:
MapiMessageRepresentação de mensagens MSG de alto nível
MapiAttachmentAnexo ou mensagem incorporada num documento de identificação. MapiMessage
MapiRecipientBeneficiário em um MapiMessage
MapiPropertyEntrada única da propriedade MAPI
MapiPropertyCollectionSaco de propriedade MAPI tipo
CommonMessagePropertyIdNúmero de identificadores padrão da propriedade MAPI
MsgReaderLeitora de estruturas de MSG de baixo nível
MsgWriterEscrita de estrutura com baixo nível de GMS
CfbReaderLeitora de recipientes binários CFB
CfbWriterEscritor de recipientes binários CFB
CfbDocumentDocumento CFB de construção em memória
CfbStorageNodo de armazenamento num documento CFB
CfbStreamNodo de fluxo num documento CFB

Ver também:

 Português