Ú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.FOSS

Pak 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átRozšířeníČtěte.Píšeš.
Outlook MSG.msgAno , ano .Ano , ano .
MIME (EML).emlAno , ano .Ano , ano .
Binární soubor složeného souboru.cfbAno , 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?