Inleiding
Het programmatisch parseren van e-mailberichten is een veelvoorkomende eis voor archiveringsgereedschappen, compliance-pijplijnen en migratietools. Outlook-MSG-bestanden gebruiken het Compound File Binary (CFB) containerformaat met MAPI-eigenschaps-streams, terwijl EML-bestanden de MIME-standaard volgen. Beide formaten vereisen zorgvuldige verwerking van coderingen, gevouwen headers en geneste bijlagen.
Aspose.Email FOSS voor .NET is een gratis, MIT-gelicentieerde C# bibliotheek die een volledige read-write API biedt voor MSG- en EML-berichten. Het richt zich op .NET 8.0+ en heeft geen afhankelijkheid van Microsoft Outlook of een native COM-interoplaag. De bibliotheek is beschikbaar als het aspose.email.foss NuGet pakket.
Dit bericht loopt de bericht-parsingmogelijkheden die in de bibliotheek zijn opgenomen door, van het laden van bestanden van schijf tot het extraheren van individuele MAPI-eigenschappen en het converteren tussen formaten.
Wat er inbegrepen is
MSG-bestanden laden
De MapiMessage-klasse is het primaire toegangspunt voor het werken met Outlook-MSG-bestanden. Je kunt een bericht laden vanaf een bestandspad of een stream, met een optionele strict-validation-vlag die eventuele structurele problemen in het bestand zichtbaar maakt.
// Load an MSG file from disk
var message = MapiMessage.FromFile("meeting-invite.msg");
Console.WriteLine($"Subject: {message.Subject}");
Console.WriteLine($"From: {message.SenderName} <{message.SenderEmailAddress}>");
Console.WriteLine($"Date: {message.MessageDeliveryTime}");
Console.WriteLine($"Recipients: {message.Recipients.Count}");
Console.WriteLine($"Attachments: {message.Attachments.Count}");
Het geretourneerde MapiMessage biedt getypeerde eigenschappen voor veelvoorkomende velden, waaronder Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageId en MessageDeliveryTime.
EML-berichten laden
EML-bestanden gebruiken het MIME-formaat. MapiMessage.LoadFromEml accepteert een bestandspad, een Stream of een byte[] en retourneert hetzelfde MapiMessage object, zodat je één uniforme API gebruikt, ongeacht het bronformaat.
// Load from a file path
var fromFile = MapiMessage.LoadFromEml("newsletter.eml");
// Load from a stream
using var stream = File.OpenRead("newsletter.eml");
var fromStream = MapiMessage.LoadFromEml(stream);
Console.WriteLine($"Subject: {fromStream.Subject}");
Console.WriteLine($"Body: {fromStream.Body?.Trim()}");
De parser verwerkt gevouwen headers, Base64- en quoted-printable-transfercoderingen, en meerdere ontvangers in To/Cc-velden.
Werken met ontvangers en bijlagen
Zodra een bericht is geladen, zijn ontvangers en bijlagen beschikbaar als sterk getypeerde collecties. Elke MapiRecipient bevat EmailAddress, DisplayName en RecipientType velden. Elke MapiAttachment biedt Filename, Data, MimeType en ContentId.
var message = MapiMessage.FromFile("report.msg");
foreach (var recipient in message.Recipients)
{
Console.WriteLine($" {recipient.DisplayName} <{recipient.EmailAddress}> (type={recipient.RecipientType})");
}
foreach (var attachment in message.Attachments)
{
Console.WriteLine($" {attachment.Filename} ({attachment.MimeType}, {attachment.Data.Length} bytes)");
File.WriteAllBytes(attachment.Filename!, attachment.Data);
}
Ingesloten berichtbijlagen worden ook ondersteund. Wanneer MapiAttachment.IsEmbeddedMessage true is, retourneert de EmbeddedMessage eigenschap een geneste MapiMessage die je recursief kunt inspecteren.
Toegang tot MAPI-eigenschappen
Voor geavanceerde scenario’s stelt elk bericht, elke ontvanger en elke bijlage een Properties collectie van type MapiPropertyCollection beschikbaar. Je kunt individuele MAPI-eigenschappen lezen, toevoegen en verwijderen op basis van hun eigenschaps-ID en typecode.
var message = MapiMessage.FromFile("custom-props.msg");
// Iterate all properties on the message
foreach (var prop in message.Properties.IterProperties())
{
Console.WriteLine($"Tag: 0x{prop.PropertyTag:X8}, Value: {prop.Value}");
}
// Read a specific property
var subject = message.Properties.Get(
(ushort)CommonMessagePropertyId.Subject,
(ushort)PropertyTypeCode.PtypString);
De CommonMessagePropertyId enum definieert bekende MAPI property identifiers voor de kernsemantiek van berichten, body-velden, transport-headers en attachment-metadata.
Converteren tussen MSG en EML
Een geparseerd bericht kan weer worden opgeslagen in elk van de formaten. Save() schrijft MSG-bytes, terwijl SaveToEml() MIME-output genereert. Dit maakt formaatconversie eenvoudig.
// Load an EML and save as MSG
var message = MapiMessage.LoadFromEml("incoming.eml");
message.Save("converted.msg");
// Load an MSG and save as EML
var msg = MapiMessage.FromFile("outgoing.msg");
msg.SaveToEml("exported.eml");
Beide methoden accepteren ook een Stream parameter voor in-memory verwerking zonder het bestandssysteem aan te raken.
Snelstart
Installeer het pakket vanaf NuGet:
dotnet add package Aspose.Email.FOSSParse vervolgens uw eerste bericht:
using Aspose.Email.Foss.Msg;
// Load an MSG file
var message = MapiMessage.FromFile("sample.msg");
Console.WriteLine($"Subject: {message.Subject}");
Console.WriteLine($"From: {message.SenderName} <{message.SenderEmailAddress}>");
Console.WriteLine($"Date: {message.MessageDeliveryTime}");
Console.WriteLine($"Body length: {message.Body?.Length ?? 0} chars");
// List attachments
foreach (var att in message.Attachments)
Console.WriteLine($" Attachment: {att.Filename} ({att.Data.Length} bytes)");
// Convert to EML
message.SaveToEml("sample.eml");
Console.WriteLine("Saved as EML.");
Ondersteunde formaten
| Formaat | Extensie | Lezen | Schrijven |
|---|---|---|---|
| Outlook MSG | .msg | Ja | Ja |
| MIME (EML) | .eml | Ja | Ja |
| Compound File Binary | .cfb | Ja | Ja |
Open source & licenties
Aspose.Email FOSS voor .NET wordt uitgebracht onder de MIT-licentie. De volledige broncode is beschikbaar op GitHub op aspose-email-foss/Aspose.Email-FOSS-for-.Net. Bijdragen, problemen en pull-requests zijn welkom.
Aan de slag
- Developer Guide — gedetailleerde documentatie en walkthroughs
- Knowledge Base — FAQs en how-to-artikelen
- API Reference — volledige klasse- en methode-referentie