Introducere
Aspose.Email FOSS for .NET este o bibliotecă C# licențiată MIT, fără dependențe, pentru lucrul cu
Outlook MSG files, Compound File Binary (CFB) containers, and EML messages. Acest articol parcurge
fiecare zonă principală de funcționalitate cu exemple de cod funcționale preluate direct din suita de teste a bibliotecii — fiecare nume de clasă și semnătură de metodă afișate aici sunt verificate față de
repozitoriul sursă.
Instalați cu o singură comandă — fără Microsoft Outlook, fără interop COM, fără biblioteci native:
dotnet add package Aspose.Email.Foss
Caracteristici principale
Citește și inspectează fișierele MSG
MapiMessage.FromStream() și MapiMessage.FromFile() deschid orice fișier Outlook .msg și
expun conținutul său complet: subiect, corp în text simplu, corp HTML, numele expeditorului, adresa de e‑mail a expeditorului
adresă, ora de livrare, ID‑ul mesajului pe internet, destinatari și atașamente. Nu Outlook
instalarea este necesară — întregul strat MSG și CFB este implementat în C# gestionat.
using System.IO;
using Aspose.Email.Foss.Msg;
using var stream = File.OpenRead("sample.msg");
var message = MapiMessage.FromStream(stream);
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.Body);
foreach (var recipient in message.Recipients)
Console.WriteLine($"To: {recipient.EmailAddress}");
foreach (var attachment in message.Attachments)
Console.WriteLine($"Attachment: {attachment.Filename} ({attachment.MimeType})");
Creare fișiere MSG de la zero
MapiMessage.Create() construiește un e‑mail complet în memorie. Setează SenderName,
SenderEmailAddress, HtmlBody, InternetMessageId și MessageDeliveryTime ca
proprietăți după creare, apoi adaugă destinatari cu AddRecipient() și atașamente de fișier sau flux
cu AddAttachment(). Serializați cu message.Save() — returnează un byte[]
sau scrie direct la o cale sau Stream.
using System.IO;
using Aspose.Email.Foss.Msg;
var message = MapiMessage.Create("Hello", "Body");
message.SenderName = "Alice";
message.SenderEmailAddress = "alice@example.com";
message.HtmlBody = "<p>Body</p>";
message.InternetMessageId = "<hello@example.com>";
message.MessageDeliveryTime = new DateTime(2024, 1, 2, 3, 4, 5, DateTimeKind.Utc);
message.AddRecipient("bob@example.com", "Bob");
message.AddAttachment("note.txt", "abc"u8.ToArray(), "text/plain");
using var output = File.Create("hello.msg");
message.Save(output);
Conversie EML în MSG (și înapoi)
MapiMessage.LoadFromEml() acceptă o cale de fișier, un Stream sau un byte[] care conține un
mesaj standard RFC 5322 / MIME. Parserul MIME încorporat păstrează subiectul, corpul în text simplu
corp HTML, expeditorul, destinatarii și toate atașamentele — inclusiv imaginile inline cu
antete Content-ID. SaveToEml() serializează înapoi în MIME pentru tranziții complete EML ↔ MSG
fără nicio bibliotecă MIME externă.
using System.IO;
using Aspose.Email.Foss.Msg;
using var input = File.OpenRead("message.eml");
var message = MapiMessage.LoadFromEml(input);
// Inspect fields parsed from MIME headers
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.HtmlBody);
// Save as MSG for Outlook-compatible storage
using var msgOutput = File.Create("message.msg");
message.Save(msgOutput);
// Round-trip back to EML
using var emlOutput = File.Create("roundtrip.eml");
message.SaveToEml(emlOutput);
Atașamente de Mesaje Încorporate
Un fișier MSG poate conține un alt fișier MSG ca atașament — un model comun în lanțurile de e‑mail redirecționate. AddEmbeddedMessageAttachment() atașează un obiect MapiMessage ca un atașament .msg imbricat. La citire, MapiAttachment.IsEmbeddedMessage semnalează tipul încorporat și EmbeddedMessage expune direct MapiMessage imbricat.
using System.IO;
using Aspose.Email.Foss.Msg;
var parent = MapiMessage.Create("Outer", "Parent body");
var child = MapiMessage.Create("Inner", "Child body");
child.SenderEmailAddress = "inner@example.com";
parent.AddEmbeddedMessageAttachment(child, "inner.msg");
parent.Save("outer.msg");
var loaded = MapiMessage.FromFile("outer.msg");
var attachment = loaded.Attachments[0];
if (attachment.IsEmbeddedMessage)
Console.WriteLine($"Embedded subject: {attachment.EmbeddedMessage!.Subject}");
Citire și scriere a containerului CFB
Fișierele Outlook MSG sunt construite pe formatul Compound File Binary (CFB) — un container binar ierarhic
similar cu un sistem de fișiere FAT. CfbReader expune arborele complet al directorului: iterează
stocările și fluxurile cu IterChildren(), navighează la intrări specifice prin lanț de cale cuResolvePath(), și citește octeții brut ai fluxului cu GetStreamData(). CfbWriter.ToBytes()
serializes a CfbDocument în octeți — util pentru construirea de documente CFB personalizate sau
verificarea rutelor fără pierderi.
using System.Text;
using Aspose.Email.Foss.Cfb;
// Build a CFB document from scratch
var document = new CfbDocument();
document.Root.AddStream(new CfbStream("ReadMe", Encoding.UTF8.GetBytes("hello")));
var storage = document.Root.AddStorage(new CfbStorage("DataStore"));
storage.AddStream(new CfbStream("Payload", Encoding.UTF8.GetBytes("content")));
byte[] bytes = CfbWriter.ToBytes(document);
// Read it back
using var reader = new CfbReader(bytes);
var entry = reader.ResolvePath(["DataStore", "Payload"]);
if (entry is not null)
{
var data = reader.GetStreamData(entry.StreamId);
Console.WriteLine(Encoding.UTF8.GetString(data)); // "content"
}
Acces la proprietăţi MAPI tipizate
MapiPropertyCollection oferă acces tipizat la proprietățile MAPI pentru orice obiect MSG sau de stocare.
Enumul CommonMessagePropertyId acoperă toți identificatorii standard de proprietăți MAPI — Subject,Body, BodyHtml, SenderName, SenderEmailAddress, MessageDeliveryTime,InternetMessageId, și proprietățile de atașament, inclusiv AttachFilename, AttachMimeTag,
și AttachContentId. Utilizați SetProperty() și GetPropertyValue() pentru a citi și scrie
proprietăți arbitrare dincolo de câmpurile de conveniență numite pe MapiMessage.
using Aspose.Email.Foss.Msg;
var message = MapiMessage.FromFile("sample.msg");
// Typed convenience properties
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderName);
Console.WriteLine(message.MessageDeliveryTime);
// Iterate all MAPI property keys
foreach (var key in message.IterPropertyKeys())
Console.WriteLine($"0x{(ushort)key.PropertyId:X4} / {key.PropertyType}");
Începe rapid
dotnet add package Aspose.Email.Foss
using System.IO;
using Aspose.Email.Foss.Msg;
// Read an MSG file
using var stream = File.OpenRead("sample.msg");
var message = MapiMessage.FromStream(stream);
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
foreach (var recipient in message.Recipients)
Console.WriteLine($"To: {recipient.EmailAddress}");
foreach (var attachment in message.Attachments)
Console.WriteLine($"Attachment: {attachment.Filename} ({attachment.MimeType})");
Formate acceptate
| Format | Extensie | Citire | Scriere |
|---|---|---|---|
| Compound File Binary | .cfb | ✓ | ✓ |
| Outlook Message | .msg | ✓ | ✓ |
| MIME / EML | .eml | ✓ | ✓ |
Sursă deschisă și licențiere
Aspose.Email FOSS pentru .NET este lansat sub licența MIT. Folosiți-l liber în proiecte personale, comerciale și open-source fără restricții de utilizare. Codul sursă este disponibil la github.com/aspose-email-foss/Aspose.Email-FOSS-for-.Net.