Įvadas

Aspose.Email FOSS for .NET yra MIT licencijuota, nuo priklausomybių nepriklausanti C# biblioteka, skirta dirbti su
Outlook MSG failais, Compound File Binary (CFB) konteineriais ir EML žinutėmis. Šiame įraše apžvelgiama
kiekviena pagrindinė funkcijų sritis, naudojant veikiantį kodą, tiesiogiai paimtą iš bibliotekos
testų rinkinio — kiekvienas čia parodytas klasės pavadinimas ir metodo parašas patikrintas pagal
source repository.

Įdiekite vienu komandu — be Microsoft Outlook, be COM tarpinės sąveikos, be natūralių bibliotekų:

dotnet add package Aspose.Email.Foss

Pagrindinės funkcijos

Skaityti ir peržiūrėti MSG failus

MapiMessage.FromStream() ir MapiMessage.FromFile() atveria bet kurią Outlook .msg bylą ir atskleidžia jos visą turinį: temą, paprasto teksto kūną, HTML kūną, siuntėjo vardą, siuntėjo el. pašto adresą, pristatymo laiką, internetinio pranešimo ID, gavėjus ir priedus. Outlook instaliacija nėra būtina — visas MSG ir CFB sluoksnis įgyvendintas valdomame 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})");

Kurti MSG failus nuo nulio

MapiMessage.Create() sukuria pilną el. laišką atmintyje. Nustatykite SenderName, SenderEmailAddress, HtmlBody, InternetMessageId ir MessageDeliveryTime kaip savybes po sukūrimo, tada pridėkite gavėjus naudodami AddRecipient() ir failų arba srauto priedus naudodami AddAttachment(). Serializuokite su message.Save() — grąžina byte[] arba rašo tiesiai į kelią arba 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);

Konvertuoti EML į MSG (ir atgal)

MapiMessage.LoadFromEml() priima failo kelią, Stream arba byte[], kuriame yra
standartinis RFC 5322 / MIME pranešimas. Įmontuotas MIME analizatorius išsaugo temą, paprasto teksto
kūną, HTML kūną, siuntėją, gavėjus ir visus priedus — įskaitant įterptus vaizdus su
Content-ID antraštėmis. SaveToEml() serializuoja atgal į MIME, kad būtų pilnas EML ↔ MSG ciklas
be jokios išorinės MIME bibliotekos.

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

Įterptų žinučių priedai

MSG failas gali turėti kitą MSG failą kaip priedą — įprasta schema persiųstų el. laiškų grandinėse. AddEmbeddedMessageAttachment() prideda MapiMessage objektą kaip įdėtą .msg priedą. Skaitant, MapiAttachment.IsEmbeddedMessage signalizuoja įterptą tipą ir EmbeddedMessage tiesiogiai atskleidžia įdėtą 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 Container skaitymas ir rašymas

Outlook MSG failai yra sukurti pagal Compound File Binary (CFB) formatą — hierarchinį dvejetainį
konteinerį, panašų į FAT failų sistemą. CfbReader atskleidžia visą katalogų medį: iteruokite
saugojimus ir srautus su IterChildren(), naršykite iki konkrečių įrašų pagal kelio grandinę su
ResolvePath(), ir skaitykite neapdorotus srauto baitus su GetStreamData(). CfbWriter.ToBytes()
serializuoja CfbDocument į baitus — naudinga kuriant pasirinktinius CFB dokumentus arba
tikrinant be nuostolių atliekamus keliones.

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

Tipizuota MAPI savybės prieiga

MapiPropertyCollection suteikia tipizuotą MAPI savybių prieigą bet kuriam MSG arba saugojimo objektui.
CommonMessagePropertyId išvardinimas apima visus standartinius MAPI savybių identifikatorius — Subject,
Body, BodyHtml, SenderName, SenderEmailAddress, MessageDeliveryTime,
InternetMessageId, ir priedų savybes, įskaitant AttachFilename, AttachMimeTag,
ir AttachContentId. Naudokite SetProperty() ir GetPropertyValue() norėdami skaityti ir rašyti
bet kokias savybes, viršijančias pavadintus patogumo laukus, esančius 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}");

Greitas pradžia

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

Palaikomi formatai

FormatasPlėtinysSkaitytiRašyti
Compound File Binary.cfb
Outlook Message.msg
MIME / EML.eml

Atviro kodo ir licencijavimas

Aspose.Email FOSS for .NET išleidžiamas pagal MIT licenciją. Naudokite jį laisvai asmeniniuose, komerciniuose ir atviro kodo projektuose be jokių naudojimo apribojimų. Šaltinio kodas prieinamas adresu github.com/aspose-email-foss/Aspose.Email-FOSS-for-.Net.


Pradžia