Introducere
Parsarea programată a mesajelor de e-mail este o cerință comună pentru instrumentele de arhivare, pipelines de conformitate și utilități de migrare. Fișierele Outlook MSG folosesc formatul container Compound File Binary (CFB) cu fluxuri de proprietate MAPI, în timp ce fișierele EML urmează standardul MIME. Ambele formate necesită manipularea atentă a codificărilor, capitelor pliate și atașamentelor nestate.
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 pachet.
Acest articol se deplasează prin capacitățile de analizare a mesajelor incluse în bibliotecă, de la încărcarea fișierelor off disk până la extragerea proprietăților individuale MAPI și convertirea între formate.
Ce înseamnă?
Încărcarea fișierelor MSG
În ceea ce priveşte MapiMessage class este punctul principal de intrare pentru a lucra cu fișiere Outlook MSG. Puteți încărca un mesaj dintr-o cale sau o fluxă, cu un steag opțional strict care evidențiază orice probleme structurale găsite în fișier.
// 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}");
Cei care s-au întors. MapiMessage expune proprietățile tipate pentru câmpurile comune, inclusiv: Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageId, și MessageDeliveryTime.
Încărcarea mesajelor EML
Fișierele EML folosesc formatul MIME. MapiMessage.LoadFromEml acceptă o cale de fişier, a Stream, sau a byte[] şi returnează acelaşi lucru. MapiMessage Obiect, astfel încât să utilizați un API unificat indiferent de formatul sursă.
// 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()}");
Parserul gestionează intitularile pliate, codurile de transfer cu citare și imprimare Base64 și câmpuri To/Cc multi-recipiente.
Lucrarea cu destinatarii și atașamentele
Odată ce un mesaj este încărcat, destinatarii și atașamentele sunt disponibile ca colecții tipate puternic. MapiRecipient transportă EmailAddress, DisplayName, și RecipientType Fiecare câmp. MapiAttachment oferă: Filename, Data, MimeType, și 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);
}
Sunt, de asemenea, suportate atașamente de mesaje încorporate. MapiAttachment.IsEmbeddedMessage este: true, în cazul EmbeddedMessage proprietatea returnează un nested MapiMessage care se poate inspecta recursiv.
Accesarea proprietăților MAPI
Pentru scenarii avansate, fiecare mesaj, destinatar și atașament expune o Properties colectarea tipului de MapiPropertyCollection. Puteți citi, adăuga și elimina proprietățile individuale MAPI prin ID-ul lor de proprietate și codul tip.
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);
În ceea ce priveşte CommonMessagePropertyId enum definește identificatorii de proprietate MAPI bine cunoscuți pentru semantica mesajului principal, câmpurile corpului, intitulatoarele transporturilor și metadatele atașamentelor.
Conversiunea între MSG și EML
Un mesaj analizat poate fi salvat în ambele formate. Save() Scrie byte MSG, în timp ce SaveToEml() Acest lucru face conversiunea formatului simplă.
// 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");
Ambele metode acceptă, de asemenea, o Stream parametru pentru prelucrarea în memorie fără a atinge sistemul de fișiere.
Început rapid
Instalați pachetul de la NuGet:
dotnet add package Aspose.Email.FOSSAtunci analizează primul mesaj:
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.");
Formatele suportate
| Formatul | Extindere | Citeşte. | Scrie . |
|---|---|---|---|
| Perspectiva MSG | .msg | Da, sunt. | Da, sunt. |
| MIME (EML) | .eml | Da, sunt. | Da, sunt. |
| Fişier binar compus | .cfb | Da, sunt. | Da, sunt. |
Open Source & Licențiere
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.Contribuţiile, problemele şi cererile de retragere sunt binevenite.
Cum să începem?
- Ghidul dezvoltatorilor documentație detaliată și orientări de lucru
- Baza de cunoştinţe FAQ-uri și articole cu instrucțiuni
- Referință API referință completă la clasă și metodă