Funkcije i funkcionalnosti

Функције и функционалности

Ova stranica pokriva svaku glavnu funkcionalnost Aspose.Email FOSS for .NET uz radne C# primere.


Čitanje MSG fajlova

Učitajte MSG fajl sa putanje ili toka i pristupite svim njegovim svojstvima:

using System.IO;
using Aspose.Email.Foss.Msg;

using var stream = File.OpenRead("message.msg");
var message = MapiMessage.FromStream(stream);

Console.WriteLine(message.Subject);
Console.WriteLine(message.Body);
Console.WriteLine(message.HtmlBody);
Console.WriteLine(message.SenderName);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.MessageDeliveryTime);
Console.WriteLine(message.InternetMessageId);

Koristite strict: false za popustljivo parsiranje nestandardnih MSG fajlova:

var message = MapiMessage.FromFile("message.msg", strict: false);

Proverite ValidationIssues da pregledate sva upozorenja o formatu bez izbacivanja:

foreach (var issue in message.ValidationIssues)
    Console.WriteLine($"Warning: {issue}");

Kreiranje MSG datoteka

Izgradite kompletan email koristeći MapiMessage.Create() i serijalizujte pomoću Save():

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

using var output = File.Create("hello.msg");
message.Save(output);

Save() без аргумената враћа byte[].
Save(path) директно пише у путању датотеке.


Primaoci

Dodaj To, Cc i Bcc primaoce sa AddRecipient():

message.AddRecipient("alice@example.com", "Alice");
message.AddRecipient("bob@example.com", "Bob", MapiMessage.RecipientTypeCc);
message.AddRecipient("carol@example.com", "Carol", MapiMessage.RecipientTypeBcc);

Iterirajte primaoce iz učitane poruke:

foreach (var recipient in message.Recipients)
    Console.WriteLine($"{recipient.DisplayName} <{recipient.EmailAddress}>");

Прилози

Dodajte fajl ili stream priloge sa metapodacima:

// From byte array
message.AddAttachment("report.pdf", pdfBytes, "application/pdf");

// From stream
using var attachStream = File.OpenRead("photo.png");
message.AddAttachment("photo.png", attachStream, "image/png");

// Inline image with Content-ID
message.AddAttachment("logo.png", logoBytes, "image/png", contentId: "logo@cid");

Pročitajte priloge iz učitane poruke:

foreach (var attachment in message.Attachments)
{
    Console.WriteLine($"Filename: {attachment.Filename}");
    Console.WriteLine($"MIME type: {attachment.MimeType}");
    Console.WriteLine($"Size: {attachment.Data.Length} bytes");
    File.WriteAllBytes(attachment.Filename!, attachment.Data);
}

Ugrađeni prilozi poruke

Приложите један MapiMessage унутар другог — уобичајено у ланцима прослеђених е‑порука:

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

Nema priloženog teksta za prevođenje. Molim vas da dostavite sadržaj koji želite da prevedem.

var loaded = MapiMessage.FromFile("outer.msg");
foreach (var attachment in loaded.Attachments)
{
    if (attachment.IsEmbeddedMessage)
    {
        Console.WriteLine($"Embedded: {attachment.EmbeddedMessage!.Subject}");
    }
}

EML i MIME konverzija

Učitajte RFC 5322 .eml fajl u MapiMessage za Outlook‑kompatibilno skladištenje:

using System.IO;
using Aspose.Email.Foss.Msg;

using var input = File.OpenRead("message.eml");
var message = MapiMessage.LoadFromEml(input);

using var msgOutput = File.Create("message.msg");
message.Save(msgOutput);

Konvertujte nazad u EML iz MSG fajla:

var message = MapiMessage.FromFile("message.msg");
using var emlOutput = File.Create("roundtrip.eml");
message.SaveToEml(emlOutput);

LoadFromEml() takođe prihvata string putanju ili byte[]. SaveToEml() bez argumenata vraća byte[]. Naslov, telo, HTML telo, pošiljalac, primaoci i svi prilozi (uključujući inline slike sa Content-ID) su očuvani kroz potpune EML ↔ MSG cikluse.


MAPI pristup svojstvu

MapiPropertyCollection pruža tipizovan pristup MAPI svojstvima putem SetProperty() i GetPropertyValue(). Koristite vrednosti enumeracije CommonMessagePropertyId za standardna svojstva:

using Aspose.Email.Foss.Msg;

var message = MapiMessage.FromFile("sample.msg");

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

CFB pristup kontejneru

Outlook MSG datoteke su izgrađene na Compound File Binary (CFB) formatu. CfbReader izlaže kompletno stablo direktorijuma za pregled i ekstrakciju podataka:

using System.Text;
using Aspose.Email.Foss.Cfb;

using var reader = CfbReader.FromFile("message.msg");

// Iterate all top-level children
foreach (var entry in reader.IterChildren(CfbConstants.RootStreamId))
    Console.WriteLine($"{(entry.IsStorage() ? "Storage" : "Stream")}: {entry.Name}");

// Navigate to a specific stream by path
var entry2 = reader.ResolvePath(["__substg1.0_0037001E"]);
if (entry2 is not null)
{
    var data = reader.GetStreamData(entry2.StreamId);
    Console.WriteLine(Encoding.Unicode.GetString(data));
}

Izgradite i serijalizujte CFB dokument od nule uz CfbWriter:

using System.Text;
using Aspose.Email.Foss.Cfb;

var document = new CfbDocument();
document.Root.AddStream(new CfbStream("Notes", 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);
File.WriteAllBytes("output.cfb", bytes);

Saveti i najbolje prakse

  • Koristite using ili Dispose() na MapiMessage i CfbReader da oslobodite deskriptore fajlova
  • Proverite message.ValidationIssues nakon učitavanja da biste otkrili nestandardno MSG formatiranje
  • Parametar strict u FromFile() / FromStream() kontroliše toleranciju grešaka — koristite strict: false za popustljivije parsiranje fajlova iz sistema trećih strana
  • MapiMessage.Create() podrazumevano generiše poruke u Unicode nizu; postavite unicodeStrings: false za kompatibilnost sa starijim ANSI
  • SaveToEml() bez argumenata vraća byte[] — praktično za radne tokove u memoriji

Uobičajeni problemi

ProblemUzrokRešenje
CfbException prilikom učitavanjaNije važeći CFB/MSG fajlProverite da je fajl Outlook MSG
Prazan Body nakon učitavanjaTelo je sačuvano samo u HTML-uProverite message.HtmlBody umesto toga
Konstanta tipa primaoca nije pronađenaNije samostalni tipKoristite MapiMessage.RecipientTypeTo, MapiMessage.RecipientTypeCc ili MapiMessage.RecipientTypeBcc
0 priloga nakon LoadFromEmlEML nema Content-Disposition: attachment deloveUgrađeni delovi (samo Content-ID) takođe se pojavljuju u Attachments

Sažetak API referencije

KlasaOpis
MapiMessageVisok nivo MSG reprezentacije poruke
MapiAttachmentPrilog ili ugrađena poruka na MapiMessage
MapiRecipientPrimaoc na MapiMessage
MapiPropertyJedan MAPI unos svojstva
MapiPropertyCollectionTipizovana MAPI kesa svojstava
CommonMessagePropertyIdEnumeracija standardnih MAPI identifikatora svojstava
MsgReaderČitač MSG strukture niskog nivoa
MsgWriterPisac MSG strukture niskog nivoa
CfbReaderČitač CFB binarnog kontejnera
CfbWriterPisac CFB binarnog kontejnera
CfbDocumentCFB dokument u memoriji za konstrukciju
CfbStorageČvor skladišta u CFB dokumentu
CfbStreamČvor toka u CFB dokumentu
 Српски