Ievads

Aspose.Email FOSS for .NET ir MIT licences, atkarību brīva C# bibliotēka, kas paredzēta darbam ar
Outlook MSG failiem, Compound File Binary (CFB) konteineriem un EML ziņām. Šis raksts izpēta
katru galveno funkcionalitātes jomu, izmantojot darbināmus koda piemērus, kas ņemti tieši no bibliotēkas
testu komplekta — katrs šeit parādītais klases nosaukums un metodes paraksts ir pārbaudīts pret
source repository.

Instalējiet ar vienu komandu — nav Microsoft Outlook, nav COM interop, nav vietējo bibliotēku:

dotnet add package Aspose.Email.Foss

Galvenās funkcijas

Lasīt un pārbaudīt MSG failus

MapiMessage.FromStream() un MapiMessage.FromFile() atver jebkuru Outlook .msg failu un atklāj tā pilnu saturu: tematu, vienkārša teksta ķermeni, HTML ķermeni, sūtītāja vārdu, sūtītāja e-pasta adresi, piegādes laiku, interneta ziņojuma ID, saņēmējus un pielikumus. Nav nepieciešama Outlook instalācija — visa MSG un CFB slānis ir īstenots pārvaldītā C#.

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})");

Izveidot MSG failus no nulles

MapiMessage.Create() izveido pilnīgu e-pastu atmiņā. Iestatiet SenderName, SenderEmailAddress, HtmlBody, InternetMessageId un MessageDeliveryTime kā īpašības pēc izveides, pēc tam pievienojiet saņēmējus ar AddRecipient() un faila vai straumes pielikumus ar AddAttachment(). Serializējiet ar message.Save() — atgriež byte[] vai raksta tieši uz ceļu vai 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);

Pārveidot EML uz MSG (un atpakaļ)

MapiMessage.LoadFromEml() pieņem faila ceļu, Stream vai byte[], kas satur
standarta RFC 5322 / MIME ziņojumu. Iebūvētais MIME parsētājs saglabā tematu, vienkāršā teksta
ķermeni, HTML ķermeni, sūtītāju, saņēmējus un visus pielikumus — ieskaitot iekļautus attēlus ar
Content-ID galvenēm. SaveToEml() serializē atpakaļ uz MIME, lai nodrošinātu pilnīgu EML ↔ MSG pāreju
bez jebkādas ārējās MIME bibliotēkas.

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);

Iegultie ziņojuma pievienojumi

MSG fails var saturēt citu MSG failu kā pielikumu — izplatīts raksts pāradresēto e-pasta ķēdēs. AddEmbeddedMessageAttachment() pievieno MapiMessage objektu kā iegultu .msg pielikumu. Lasot, MapiAttachment.IsEmbeddedMessage norāda uz iegulto tipu, un EmbeddedMessage tieši atklāj iegulto MapiMessage.

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}");

CFB konteineru lasīšana un rakstīšana

Outlook MSG faili ir izveidoti, balstoties uz Compound File Binary (CFB) formātu — hierarhisku bināru konteineru, kas līdzīgs FAT failu sistēmai. CfbReader atklāj pilnu direktoriju koku: iterējiet krātuves un plūsmas ar IterChildren(), pārvietojieties uz konkrētām ierakstiem, izmantojot ceļa ķēdi, ar ResolvePath(), un nolasiet neapstrādātos plūsmas baitus ar GetStreamData(). CfbWriter.ToBytes() serializē CfbDocument baitos — noderīgi, lai izveidotu pielāgotus CFB dokumentus vai pārbaudītu bezzaudējuma pārvēršanas ciklus.

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"
}

Tipizēta MAPI īpašības piekļuve

MapiPropertyCollection nodrošina tipizētu MAPI īpašību piekļuvi jebkuram MSG vai glabāšanas objektam.
The CommonMessagePropertyId uzskaitījums aptver visus standarta MAPI īpašību identifikatorus — Subject, Body, BodyHtml, SenderName, SenderEmailAddress, MessageDeliveryTime, InternetMessageId, kā arī piesaistes īpašības, ieskaitot AttachFilename, AttachMimeTag un AttachContentId.
Izmantojiet SetProperty() un GetPropertyValue(), lai lasītu un rakstītu patvaļīgas īpašības, kas pārsniedz nosauktos ērtuma laukus uz 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}");

Ātrais sākums

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})");

Atbalstītie formāti

FormātsPaplašinājumsLasītRakstīt
Compound File Binary.cfb
Outlook Message.msg
MIME / EML.eml

Atvērtā pirmkods un licencēšana

Aspose.Email FOSS for .NET ir izlaists zem MIT licences. Izmantojiet to brīvi personīgajos, komerciālajos un atvērtā koda projektos bez lietošanas ierobežojumiem. Avota kods ir pieejams vietnē github.com/aspose-email-foss/Aspose.Email-FOSS-for-.Net.


Sākšana