Característiques i funcionalitats

Característiques i funcionalitats

Característiques i funcionalitats

Aquesta pàgina cobreix totes les funcions principals d’Aspose.Email FOSS for .NET amb exemples funcionals en C#.


Lectura de fitxers MSG

Carrega un fitxer MSG des d’una ruta o flux i accedeix a totes les seves propietats:

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

Utilitzeu strict: false per a l’anàlisi tolerant de fitxers MSG no estàndard:

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

Comproveu ValidationIssues per revisar qualsevol avís de format sense llançar:

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

Creació de fitxers MSG

Construeix un correu electrònic complet amb MapiMessage.Create() i serialitza’l amb 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() sense arguments retorna un byte[]. Save(path) escriu directament a una ruta de fitxer.


Destinataris

Afegeix To, Cc i Bcc destinataris amb AddRecipient():

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

Itera els destinataris d’un missatge carregat:

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

Adjuncions

Afegeix fitxers o adjunts de flux amb metadades:

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

Llegir els fitxers adjunts d’un missatge carregat:

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

Fitxers adjunts de missatge incrustat

Adjunta un MapiMessage dins d’un altre — comú en cadenes de correu electrònic reenviat:

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

Llegiu els fitxers adjunts incrustats del missatge.

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

Conversió d’EML i MIME

Carrega un fitxer RFC 5322 .eml a un MapiMessage per a l’emmagatzematge compatible amb 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);

Convertir de nou a EML des d’un fitxer MSG:

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

LoadFromEml() també accepta un camí string o byte[]. SaveToEml() sense arguments retorna un byte[]. L’assumpte, el cos, el cos HTML, l’emissor, els destinataris i tots els fitxers adjunts (incloent imatges incrustades amb Content-ID) es conserven durant viatges d’anada i tornada complets EML ↔ MSG.


Accés a propietat MAPI

MapiPropertyCollection proporciona accés tipat a les propietats MAPI a través de SetProperty() i GetPropertyValue(). Utilitzeu els valors enum de CommonMessagePropertyId per a les propietats estàndard:

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

Accés al contenidor CFB

Els fitxers Outlook MSG es construeixen sobre el format Compound File Binary (CFB). CfbReader exposa l’arbre de directoris complet per a inspecció i extracció de dades:

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

Construeix i serialitza un document CFB des de zero amb 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);

Consells i bones pràctiques

  • Utilitzeu using o Dispose() a MapiMessage i CfbReader per alliberar els identificadors de fitxer
  • Comproveu message.ValidationIssues després de carregar per detectar format MSG no estàndard
  • El paràmetre strict a FromFile() / FromStream() controla la tolerància d’errors — utilitzeu
    strict: false per a un anàlisi indulgent dels fitxers de sistemes de tercers
  • MapiMessage.Create() genera missatges de cadena Unicode per defecte; establiu unicodeStrings: false
    per a compatibilitat ANSI antiga
  • SaveToEml() sense arguments retorna byte[] — còmode per a fluxos de treball en memòria

Problemes comuns

ProblemaCausaSolució
CfbException en carregarFitxer CFB/MSG no vàlidVerifiqueu que el fitxer sigui un Outlook MSG
Body buit després de carregarCos emmagatzemat només en HTMLComproveu message.HtmlBody en canvi
0 adjuncions després de LoadFromEmlEML no té parts Content-Disposition: attachmentLes parts en línia (només Content-ID) també apareixen a Attachments

Resum de la Referència de l’API

ClasseDescripció
MapiMessageRepresentació de missatge MSG d’alt nivell
MapiAttachmentAdjunt o missatge incrustat en un MapiMessage
MapiRecipientDestinatari en un MapiMessage
MapiPropertyEntrada única de propietat MAPI
MapiPropertyCollectionBossa de propietats MAPI tipada
CommonMessagePropertyIdEnumeració d’identificadors de propietats MAPI estàndard
MsgReaderLector d’estructura MSG de baix nivell
MsgWriterEscriptor d’estructura MSG de baix nivell
CfbReaderLector de contenidor binari CFB
CfbWriterEscriptor de contenidor binari CFB
CfbDocumentDocument CFB en memòria per a construcció
CfbStorageNode d’emmagatzematge en un document CFB
CfbStreamNode de flux en un document CFB
 Català