Úvodní článek
Programatické analyzování e-mailových zpráv je běžnou podmínkou pro archivní nástroje, potrubí shody a migrační úřady. Soubory Outlook MSG používají formát kontejnerů Compound File Binary (CFB) s toky vlastností MAPI, zatímco soubori EML následují standard MIME. Oba formáty vyžadují pečlivé nakládání s kódováním, složenými nadpisy a vestavěnými přílohy.
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 balíček.
Tento příspěvek prochází funkcemi analýzy zpráv zahrnutými v knihovně, od načítání souborů na disku až po extrahování jednotlivých vlastností MAPI a konverzi mezi formáty.
Co se v ní nachází?
Naložení souborů MSG
Úřad pro bezpečnost a ochranu zdraví MapiMessage class je primární vstupní bod pro práci s soubory Outlook MSG. Můžete načítat zprávu z cesty nebo proudu souboru, se volitelným přísně ověřovacím odznakem, který vypovídá o jakýchkoli strukturálních problémech nalezených ve souborě.
// 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}");
Vrátil se. MapiMessage odhalí typované vlastnosti pro společné pole včetně: Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageId,a) MessageDeliveryTime.
Naložení zpráv EML
Soubory EML používají formát MIME. MapiMessage.LoadFromEml přijímá cestu souboru, a Stream, nebo a byte[] a vrátí stejné číslo. MapiMessage Objekt, takže používáte jeden jednotný API bez ohledu na zdrojový formát.
// 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()}");
Parser zvládá sklopené nadpisy, kódování Base64 a kódující se k tisknutí a pole To/Cc pro více příjemců.
Práce s příjemci a přílohy
Jakmile je zpráva načtená, jsou příjemci a přílohy k dispozici jako silně typované sbírky. MapiRecipient přepravují EmailAddress, DisplayName,a) RecipientType Každá pole. MapiAttachment poskytuje: Filename, Data, MimeType,a) 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);
}
Podporují se také přílohy vložené zprávy. MapiAttachment.IsEmbeddedMessage je: true, v . EmbeddedMessage Vlastnost vrací nested. MapiMessage které můžete rekurzivně zkontrolovat.
Přístup k vlastnostem MAPI
Pro pokročilé scénáře, každá zpráva, příjemce a příloha odhalí Properties Sbírka typu MapiPropertyCollection.Můžete číst, přidávat a odstranit jednotlivé vlastnosti MAPI podle jejich identifikačního čísla vlastností a kódu typu.
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);
Úřad pro bezpečnost a ochranu zdraví CommonMessagePropertyId enum definuje dobře známé identifikátory vlastností MAPI pro základní semantiku zpráv, body pole, transportové nadpisy a metadata přílohy.
Konverze mezi MSG a EML
Parsed zpráva může být uložen zpět v jakémkoli formátu. Save() píšou MSG bajty, zatímco SaveToEml() To dělá přeměnu formátu jednodušší.
// 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");
Obě metody rovněž přijímá Stream parametry pro zpracování v paměti bez dotýkání souborového systému.
Rychlý start
Nainstalujte balíček z NuGet:
dotnet add package Aspose.Email.FOSSPak analyzuj svou první zprávu:
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.");
Podporované formáty
| Formát | Rozšíření | Čtěte. | Píšeš. |
|---|---|---|---|
| Outlook MSG | .msg | Ano , ano . | Ano , ano . |
| MIME (EML) | .eml | Ano , ano . | Ano , ano . |
| Binární soubor složeného souboru | .cfb | Ano , ano . | Ano , ano . |
Open Source & Licence
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.Příspěvky, otázky a žádosti o odtažení jsou vítány.
Jak začít?
- Příručka pro vývojáře podrobná dokumentace a průvodní informace
- Základní znalosti Časté otázky a články s návodem na práci
- Odkaz na API úplná třída a referenční metoda