Indledning
Programmatisk analyse af e-mailmeddelelser er et almindeligt krav til arkiveringsværktøjer, overholdelsespipeliner og migrationsværker. Outlook MSG filer bruger Compound File Binary (CFB) containerformat med MAPI ejendomsstrømme, mens EML filer følger MIME standarden. Begge formater kræver omhyggelig håndtering af kodninger, foldede overskrifter og indlejrede vedhæftelser.
Aspose.Email FOSS for .NET is a free, MIT-licensed C# library that provides a complete read-write API for MSG and EML messages. It targets .NET 8.0+ and has no dependency on Microsoft Outlook or any native COM interop layer. The library is available as the aspose.email.foss NuGet pakke.
Denne artikel går gennem de meddelelsesparseringsfunktioner, der er inkluderet i biblioteket, fra at indlæse filer på disk til at udtrække individuelle MAPI-egenskaber og konvertere mellem formater.
Hvad der indgår i den
Indlæse MSG-filer
Den Europæiske Union MapiMessage Du kan indlæse en meddelelse fra en filvej eller et stream med en valgfri streng validering flag, der viser eventuelle strukturelle problemer i filen.
// 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}");
De tilbagevendte. MapiMessage viser typede egenskaber for fælles felter, herunder: Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageId, og MessageDeliveryTime.
Indlæse EML-meddelelser
EML-filer bruger MIME-formatet. MapiMessage.LoadFromEml accepterer en filvej, a Stream, eller en byte[] og returnerer det samme MapiMessage Objekt, så du bruger én samlet API uanset kildeformat.
// 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()}");
Parseren håndterer foldede overskrifter, Base64 og citerede udskrivbare overførselskodninger samt To/Cc-felter med flere modtagere.
Arbejde med modtagere og vedhæftede filer
Når en besked er indlæst, kan modtagerne og vedhæftede filer findes som kollektioner med stærk typing. MapiRecipient indfører EmailAddress, DisplayName, og RecipientType Hver af feltene. MapiAttachment giver Filename, Data, MimeType, og 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);
}
Der er også støtte til indlejrede meddelelsesbilag. MapiAttachment.IsEmbeddedMessage er: true, den EmbeddedMessage Ejendommen returnerer en nestet MapiMessage som du kan inspicere rekursivt.
Adgang til MAPI-egenskaber
For avancerede scenarier, hver besked, modtager og vedhæftet eksponerer en Properties Samling af type MapiPropertyCollection.Du kan læse, tilføje og fjerne individuelle MAPI-egenskaber ved hjælp af deres ejendoms-ID og type kode.
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);
Den Europæiske Union CommonMessagePropertyId enum definerer velkendte MAPI-egendomsidentifikatorer for kernemeddelelsessemantik, bodyfelter, transportoverskrifter og vedhæftede metadata.
Omregning mellem MSG og EML
En analyseret meddelelse kan gemmes tilbage i begge formater. Save() skriver MSG-byte, mens SaveToEml() Dette gør formatkonvertering enkel.
// 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");
Begge metoder accepterer også en Stream parametre til in-memory behandling uden at røre filsystemet.
Hurtig start
Installer pakken fra NuGet:
dotnet add package aspose.email.foss
Så analyser din første besked:
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.");
Støttede formater
| Format: | Udvidelse | Læs det. | Skriv ned |
|---|---|---|---|
| Udsigter MSG | .msg | - Ja, jeg gør. | - Ja, jeg gør. |
| MIME (EML) | .eml | - Ja, jeg gør. | - Ja, jeg gør. |
| Binær sammensat fil | .cfb | - Ja, jeg gør. | - Ja, jeg gør. |
Open Source & Licensing
Aspose.Email FOSS for .NET is released under the MIT license. The full source code is available on GitHub at Aspose-email-foss/Aspose.Email-FOSS-for-.Net.Bidrag, spørgsmål og træk anmodninger er velkomne.
Hvordan man begynder
- Udviklervejledning detaljeret dokumentation og gennemgang af oplysninger
- Vidensgrundlag Ofte stillede spørgsmål og vejledningsartikler
- API-reference fuld klasse- og metodereference