Funkce a vlastnosti

Funkce a vlastnosti

Tato stránka pokrývá všechny hlavní funkce Aspose.Email FOSS for .NET s funkčními příklady v C#.


Čtení souborů MSG

Načtěte soubor MSG z cesty nebo proudu a přistupte ke všem jeho vlastnostem:

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

Použijte strict: false pro shovívavé parsování nestandardních souborů MSG:

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

Zkontrolujte ValidationIssues a přezkoumejte případná varování formátu bez vyhození:

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

Vytváření souborů MSG

Vytvořte kompletní e‑mail pomocí MapiMessage.Create() a serializujte pomocí 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 argumentů vrací byte[]. Save(path) zapisuje přímo do cesty souboru.


Příjemci

Přidejte příjemce To, Cc a Bcc s AddRecipient():

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

Iterujte příjemce z načtené zprávy:

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

Přílohy

Přidejte soubory nebo streamové přílohy s metadaty:

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

Přečíst přílohy z načtené zprávy:

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

Přílohy vložených zpráv

Připojte jeden MapiMessage uvnitř druhého — běžné v přeposílaných e‑mailových řetězcích:

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

Přečtěte vložené přílohy zprávy:

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

Převod EML a MIME

Načtěte soubor RFC 5322 .eml do MapiMessage pro Outlook‑kompatibilní úložiště:

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

Převést zpět na EML ze souboru MSG:

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

LoadFromEml() také přijímá cestu string nebo byte[]. SaveToEml() bez argumentů vrací byte[]. Předmět, tělo, HTML tělo, odesílatel, příjemci a všechny přílohy (včetně vložených obrázků s Content-ID) jsou zachovány během kompletních EML ↔ MSG přenosů.


Přístup k MAPI vlastnostem

MapiPropertyCollection poskytuje typovaný přístup k MAPI vlastnostem prostřednictvím SetProperty() a GetPropertyValue(). Použijte výčtové hodnoty CommonMessagePropertyId pro standardní vlastnosti:

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

Přístup k CFB kontejneru

Soubory Outlook MSG jsou postaveny na formátu Compound File Binary (CFB). CfbReader poskytuje úplný adresářový strom pro kontrolu a extrakci dat:

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

Vytvořte a serializujte dokument CFB od nuly pomocí 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);

Tipy a osvědčené postupy

  • Použijte using nebo Dispose() na MapiMessage a CfbReader k uvolnění souborových popisovačů
  • Zkontrolujte message.ValidationIssues po načtení, abyste zjistili nestandardní formát MSG
  • Parametr strict v FromFile() / FromStream() řídí toleranci chyb — použijte
    strict: false pro volnější parsování souborů od třetích stran
  • MapiMessage.Create() ve výchozím nastavení vytváří zprávy jako Unicode řetězce; nastavte unicodeStrings: false
    pro kompatibilitu se starším ANSI
  • SaveToEml() bez argumentů vrací byte[] — praktické pro workflow v paměti

Časté problémy

IssueCauseFix
CfbException při načítáníNejedná se o platný soubor CFB/MSGOvěřte, že soubor je Outlook MSG
Prázdný Body po načteníTělo je uloženo pouze v HTMLZkontrolujte místo toho message.HtmlBody
Konstantu typu příjemce nenalezenoNejedná se o samostatný typPoužijte MapiMessage.RecipientTypeTo, MapiMessage.RecipientTypeCc nebo MapiMessage.RecipientTypeBcc
0 příloh po LoadFromEmlEML neobsahuje části Content-Disposition: attachmentVložené části (pouze Content-ID) se také objevují v Attachments

Shrnutí referenčního API

TřídaPopis
MapiMessageVysoceúrovňová reprezentace zprávy MSG
MapiAttachmentPříloha nebo vložená zpráva na MapiMessage
MapiRecipientPříjemce na MapiMessage
MapiPropertyJednotlivý záznam vlastnosti MAPI
MapiPropertyCollectionTypovaný kontejner vlastností MAPI
CommonMessagePropertyIdVýčet standardních identifikátorů vlastností MAPI
MsgReaderNízkourovňový čteč struktury MSG
MsgWriterNízkourovňový zapisovač struktury MSG
CfbReaderČteč binárního kontejneru CFB
CfbWriterZapisovač binárního kontejneru CFB
CfbDocumentIn-memory CFB dokument pro konstrukci
CfbStorageUzel úložiště v CFB dokumentu
CfbStreamUzel proudu v CFB dokumentu
 Čeština