Inleiding

Aspose.Email FOSS voor .NET is een MIT-gelicentieerde, afhankelijkheidsvrije C#-bibliotheek voor het werken met
Outlook MSG‑bestanden, Compound File Binary (CFB)-containers en EML‑berichten. Deze post loopt
door elk belangrijk functiegebied met werkende code‑voorbeelden die rechtstreeks uit de bibliotheek
testsuite — elke hier getoonde klassenaam en methode‑handtekening is geverifieerd tegen de
source repository.

Installeer met één opdracht — geen Microsoft Outlook, geen COM-interoperabiliteit, geen native bibliotheken:

dotnet add package Aspose.Email.Foss

Belangrijkste kenmerken

Lees en inspecteer MSG-bestanden

MapiMessage.FromStream() en MapiMessage.FromFile() openen elk Outlook .msg bestand en tonen de volledige inhoud: onderwerp, platte‑tekst body, HTML‑body, afzendernaam, afzender e‑mail adres, bezorgtijd, internetbericht‑ID, ontvangers en bijlagen. Geen Outlook installatie is vereist — de volledige MSG‑ en CFB‑laag is geïmplementeerd in managed C#.

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

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

Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.Body);

foreach (var recipient in message.Recipients)
    Console.WriteLine($"To: {recipient.EmailAddress}");

foreach (var attachment in message.Attachments)
    Console.WriteLine($"Attachment: {attachment.Filename} ({attachment.MimeType})");

MSG-bestanden vanaf nul maken

MapiMessage.Create() bouwt een volledige e‑mail in het geheugen. Stel SenderName, SenderEmailAddress, HtmlBody, InternetMessageId en MessageDeliveryTime in als eigenschappen na creatie, voeg vervolgens ontvangers toe met AddRecipient() en bestand‑ of streambijlagen met AddAttachment(). Serialiseer met message.Save() — retourneert een byte[] of schrijft direct naar een pad of Stream.

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");
message.AddAttachment("note.txt", "abc"u8.ToArray(), "text/plain");

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

Converteer EML naar MSG (en terug)

MapiMessage.LoadFromEml() accepteert een bestandspad, een Stream, of een byte[] die een
standaard RFC 5322 / MIME‑bericht bevat. De ingebouwde MIME‑parser behoudt onderwerp, platte‑tekstbody, HTML‑body, afzender, ontvangers en alle bijlagen — inclusief inline‑afbeeldingen met
Content-ID‑headers. SaveToEml() serialiseert terug naar MIME voor volledige EML ↔ MSG round‑trips
zonder enige externe MIME‑bibliotheek.

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

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

// Inspect fields parsed from MIME headers
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.HtmlBody);

// Save as MSG for Outlook-compatible storage
using var msgOutput = File.Create("message.msg");
message.Save(msgOutput);

// Round-trip back to EML
using var emlOutput = File.Create("roundtrip.eml");
message.SaveToEml(emlOutput);

Ingesloten berichtbijlagen

Een MSG‑bestand kan een ander MSG‑bestand als bijlage bevatten — een veelvoorkomend patroon in doorgestuurde e‑mailreeksen. AddEmbeddedMessageAttachment() voegt een MapiMessage‑object toe als een geneste .msg‑bijlage. Bij het lezen geeft MapiAttachment.IsEmbeddedMessage het ingebedde type aan en EmbeddedMessage maakt de geneste MapiMessage direct beschikbaar.

using System.IO;
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");

var loaded = MapiMessage.FromFile("outer.msg");
var attachment = loaded.Attachments[0];

if (attachment.IsEmbeddedMessage)
    Console.WriteLine($"Embedded subject: {attachment.EmbeddedMessage!.Subject}");

CFB Container lezen en schrijven

Outlook MSG-bestanden zijn gebouwd op het Compound File Binary (CFB)-formaat — een hiërarchische binaire
container die lijkt op een FAT-bestandssysteem. CfbReader toont de volledige directoryboom: itereren
opslagplaatsen en streams met IterChildren(), navigeer naar specifieke items via een padketen met
ResolvePath(), en lees ruwe streambytes met GetStreamData(). CfbWriter.ToBytes()
serialiseert een CfbDocument naar bytes — handig voor het construeren van aangepaste CFB-documenten of
het verifiëren van verliesvrije round-trips.

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

// Build a CFB document from scratch
var document = new CfbDocument();
document.Root.AddStream(new CfbStream("ReadMe", 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);

// Read it back
using var reader = new CfbReader(bytes);
var entry = reader.ResolvePath(["DataStore", "Payload"]);
if (entry is not null)
{
    var data = reader.GetStreamData(entry.StreamId);
    Console.WriteLine(Encoding.UTF8.GetString(data)); // "content"
}

Getypte MAPI‑eigenschapstoegang

MapiPropertyCollection biedt getypeerde MAPI‑eigenschapstoegang voor elk MSG‑ of opslagobject.
De CommonMessagePropertyId enum omvat alle standaard MAPI‑eigenschapidentifiers — Subject,
Body, BodyHtml, SenderName, SenderEmailAddress, MessageDeliveryTime,
InternetMessageId, en bijlage‑eigenschappen inclusief AttachFilename, AttachMimeTag,
en AttachContentId. Gebruik SetProperty() en GetPropertyValue() om willekeurige eigenschappen te lezen en te schrijven
buiten de benoemde gemakvelden op MapiMessage.

using Aspose.Email.Foss.Msg;

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

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

Snelstart

dotnet add package Aspose.Email.Foss
using System.IO;
using Aspose.Email.Foss.Msg;

// Read an MSG file
using var stream = File.OpenRead("sample.msg");
var message = MapiMessage.FromStream(stream);
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
foreach (var recipient in message.Recipients)
    Console.WriteLine($"To: {recipient.EmailAddress}");
foreach (var attachment in message.Attachments)
    Console.WriteLine($"Attachment: {attachment.Filename} ({attachment.MimeType})");

Ondersteunde formaten

FormaatExtensieLezenSchrijven
Compound File Binary.cfb
Outlook Message.msg
MIME / EML.eml

Open source & licensering

Aspose.Email FOSS for .NET is uitgebracht onder de MIT-licentie. Gebruik het vrij in persoonlijke, commerciële en open‑source projecten zonder gebruiksbeperkingen. De broncode is beschikbaar op github.com/aspose-email-foss/Aspose.Email-FOSS-for-.Net.


Aan de slag