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 metContent-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 metResolvePath(), 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
| Formaat | Extensie | Lezen | Schrijven |
|---|---|---|---|
| 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.