Značajke i funkcionalnosti

Značajke i funkcionalnosti

Ova stranica pokriva svaku glavnu značajku Aspose.Email FOSS for .NET uz radne C# primjere.


Čitanje MSG datoteka

Učitajte MSG datoteku iz putanje ili toka i pristupite svim njezinim 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 datoteka:

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

Provjerite ValidationIssues kako biste pregledali sve upozorenja o formatu bez bacanja:

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

Stvaranje MSG datoteka

Izradite potpuni e‑mail s MapiMessage.Create() i serijalizirajte ga s 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() bez argumenata vraća byte[]. Save(path) zapisuje izravno na putanju datoteke.


Primatelji

Dodajte To, Cc i Bcc primatelje s AddRecipient():

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

Iterirajte primatelje iz učitane poruke:

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

Privitci

Dodajte privitke datoteka ili streamova s 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čitaj privitke 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 privitci poruke

Priložite jedan MapiMessage unutar drugog — uobičajeno u proslijeđenim lancima e‑mailova:

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

Nažalost, ne mogu pristupiti ugrađenim privitcima poruke. Molim vas da tekst koji želite prevesti zalijepite izravno u poruku.

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 datoteku u MapiMessage za pohranu kompatibilnu s Outlookom:

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

Pretvorite natrag u EML iz MSG datoteke:

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

LoadFromEml() također prihvaća string put ili byte[]. SaveToEml() bez argumenata vraća byte[]. Predmet, tijelo, HTML tijelo, pošiljatelj, primatelji i svi privitci (uključujući umetnute slike s Content-ID) očuvani su kroz potpune EML ↔ MSG cikluse.


MAPI Property Access

MapiPropertyCollection pruža tipizirani pristup MAPI svojstvima putem SetProperty() i GetPropertyValue(). Koristite CommonMessagePropertyId enum vrijednosti 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 formatu Compound File Binary (CFB). CfbReader izlaže cijelo stablo direktorija za pregled i izdvajanje 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));
}

Izradite i serijalizirajte CFB dokument od nule s 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);

Savjeti i najbolje prakse

  • Koristite using ili Dispose() na MapiMessage i CfbReader za otpuštanje rukovanja datotekama
  • Provjerite message.ValidationIssues nakon učitavanja kako biste otkrili nestandardno MSG formatiranje
  • Parametar strict u FromFile() / FromStream() kontrolira toleranciju grešaka — koristite strict: false za popustljivo parsiranje datoteka iz sustava trećih strana
  • MapiMessage.Create() po zadanim postavkama proizvodi Unicode‑string poruke; postavite unicodeStrings: false za kompatibilnost s legacy ANSI
  • SaveToEml() bez argumenata vraća byte[] — praktično za radne tokove u memoriji

Uobičajeni problemi

ProblemUzrokRješenje
CfbException pri učitavanjuNije valjana CFB/MSG datotekaProvjerite je li datoteka Outlook MSG
Prazan Body nakon učitavanjaTijelo je pohranjeno samo u HTML-uUmjesto toga provjerite message.HtmlBody
Konstanta tipa primatelja nije pronađenaNije samostalni tipKoristite MapiMessage.RecipientTypeTo, MapiMessage.RecipientTypeCc ili MapiMessage.RecipientTypeBcc
0 privitaka nakon LoadFromEmlEML nema Content-Disposition: attachment dijeloveUgrađeni dijelovi (samo Content-ID) također se pojavljuju u Attachments

Sažetak API referencije

ClassDescription
MapiMessageVisokorazinska reprezentacija MSG poruke
MapiAttachmentPrivitak ili ugrađena poruka na MapiMessage
MapiRecipientPrimatelj na MapiMessage
MapiPropertyJedinstveni MAPI unos svojstva
MapiPropertyCollectionTipizirana MAPI kolekcija svojstava
CommonMessagePropertyIdEnum standardnih MAPI identifikatora svojstava
MsgReaderNiskorazinski čitač MSG strukture
MsgWriterNiskorazinski pisac MSG strukture
CfbReaderČitač CFB binarnog kontejnera
CfbWriterPisac CFB binarnog kontejnera
CfbDocumentIn-memory CFB dokument za izradu
CfbStorageČvor pohrane u CFB dokumentu
CfbStreamČvor toka u CFB dokumentu
 Hrvatski