Funkcie a vlastnosti

Funkcie a funkcionalita

Táto stránka pokrýva všetky hlavné funkcie Aspose.Email FOSS for .NET s funkčnými príkladmi v C#.


Čítanie súborov MSG

Načítajte súbor MSG z cesty alebo prúdu a získajte prístup ku všetkým jeho vlastnostiam:

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žite strict: false pre tolerantské parsovanie neštandardných súborov MSG:

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

Skontrolujte ValidationIssues, aby ste si prezerali varovania formátu bez vyhadzovania:

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

Vytváranie MSG súborov

Vytvorte kompletný e‑mail pomocou MapiMessage.Create() a serializujte pomocou 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 argumentov vracia byte[]. Save(path) zapisuje priamo do cesty súboru.


Príjemcovia

Pridať príjemcov 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 príjemcov z načítanej správy:

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

Prílohy

Pridať prílohy súborov alebo streamov s metadátami:

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

Prečítajte prílohy z načítanej sprá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);
}

Vložené prílohy správy

Pripojte jeden MapiMessage do druhého — bežné v preposielaných e‑mailových reťazcoch:

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

Nemôžem prečítať pripojené súbory.

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

Konverzia EML a MIME

Načítajte súbor RFC 5322 .eml do MapiMessage pre Outlook‑kompatibilné úložisko:

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

Previesť späť na EML zo súboru MSG:

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

LoadFromEml() tiež akceptuje cestu string alebo byte[]. SaveToEml() bez argumentov vráti byte[]. Predmet, telo, HTML telo, odosielateľ, príjemcovia a všetky prílohy (vrátane vložených obrázkov s Content-ID) sú zachované počas úplných EML ↔ MSG prechodov.


Prístup k vlastnostiam MAPI

MapiPropertyCollection poskytuje typizovaný prístup k MAPI vlastnostiam prostredníctvom SetProperty() a GetPropertyValue(). Použite enum hodnoty CommonMessagePropertyId pre štandardné 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}");

CFB Container Access

Súbory Outlook MSG sú postavené na formáte Compound File Binary (CFB). CfbReader zverejňuje celý strom adresárov na kontrolu a extrakciu údajov:

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

Vytvorte a serializujte dokument CFB od začiatku pomocou 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 osvedčené postupy

  • Použite using alebo Dispose() na MapiMessage a CfbReader na uvoľnenie súborových popisovačov
  • Skontrolujte message.ValidationIssues po načítaní, aby ste odhalili neštandardné formátovanie MSG
  • Parameter strict v FromFile() / FromStream() riadi toleranciu chýb — použite
    strict: false pre voľnejšie parsovanie súborov z externých systémov
  • MapiMessage.Create() vytvára Unicode reťazcové správy v predvolenom nastavení; nastavte unicodeStrings: false
    pre kompatibilitu so starým ANSI
  • SaveToEml() bez argumentov vracia byte[] — praktické pre pracovné postupy v pamäti

Bežné problémy

IssueCauseFix
CfbException pri načítaníNie je platný súbor CFB/MSGOverte, že súbor je Outlook MSG
Prázdny Body po načítaníTelo je uložené iba v HTMLSkontrolujte namiesto toho message.HtmlBody
Konštanta typu príjemcu nebola nájdenáNie je samostatný typPoužite MapiMessage.RecipientTypeTo, MapiMessage.RecipientTypeCc alebo MapiMessage.RecipientTypeBcc
0 príloh po LoadFromEmlEML neobsahuje časti Content-Disposition: attachmentVložené časti (iba Content-ID) sa tiež objavujú v Attachments

Zhrnutie referencie API

TriedaPopis
MapiMessageVysokoúrovňová reprezentácia správy MSG
MapiAttachmentPríloha alebo vložená správa na MapiMessage
MapiRecipientPríjemca na MapiMessage
MapiPropertyJednotlivý záznam vlastnosti MAPI
MapiPropertyCollectionTypizovaný kontajner vlastností MAPI
CommonMessagePropertyIdVýčtový typ štandardných identifikátorov vlastností MAPI
MsgReaderNízkoúrovňový čítač štruktúry MSG
MsgWriterNízkoúrovňový zapisovač štruktúry MSG
CfbReaderČítač binárneho kontajnera CFB
CfbWriterZapisovač binárneho kontajnera CFB
CfbDocumentPamäťový CFB dokument pre konštrukciu
CfbStorageUkladací uzol v CFB dokumente
CfbStreamUzol prúdu v CFB dokumente
 Slovenčina