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

Характеристики и функционалности

Тази страница обхваща всяка основна функция на Aspose.Email FOSS for .NET с работещи C# примери.


Четене на MSG файлове

Заредете MSG файл от път или поток и достъпете всички негови свойства:

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

Използвайте strict: false за по‑мека обработка на нестандартни MSG файлове:

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

Проверете ValidationIssues, за да прегледате всички предупреждения за формат без да хвърляте:

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

Създаване на MSG файлове

Създайте пълен имейл с MapiMessage.Create() и сериализирайте с 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) записва директно в път към файл.


Получатели

Добавете получатели To, Cc и Bcc с AddRecipient():

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

Итерация на получателите от заредено съобщение:

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

Прикачени файлове

Добавете файлови или потокови прикачени файлове с метаданни:

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

Прочетете прикачените файлове от заредено съобщение:

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

Прикачени файлове към вградени съобщения

Прикрепете едно 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");

Прочетете вградените прикачени файлове:

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

Конвертиране на EML и MIME

Заредете RFC 5322 .eml файл в MapiMessage за съхранение, съвместимо с Outlook:

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

Конвертиране обратно към EML от MSG файл:

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

LoadFromEml() също приема път към string или byte[]. SaveToEml() без аргументи връща byte[]. Тема, текст, HTML текст, подател, получатели и всички прикачени файлове (включително вградени изображения с Content-ID) се запазват при пълни EML ↔ MSG трансфери.


Достъп до MAPI свойства

MapiPropertyCollection предоставя типизиран достъп до MAPI свойства чрез SetProperty() и GetPropertyValue(). Използвайте стойностите на изброеното CommonMessagePropertyId за стандартните свойства:

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 достъп до контейнер

Outlook MSG файловете са изградени върху формата Compound File Binary (CFB). CfbReader предоставя пълното дърво на директориите за преглед и извличане на данни:

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

Създайте и сериализирайте CFB документ от нулата с 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);

Съвети и най‑добри практики

  • Използвайте using или Dispose() върху MapiMessage и CfbReader за освобождаване на файлови дескриптори
  • Проверете message.ValidationIssues след зареждане, за да откриете нестандартно форматиране на MSG
  • Параметърът strict в FromFile() / FromStream() контролира толерантността към грешки — използвайте
    strict: false за по‑нежно парсиране на файлове от трети системи
  • MapiMessage.Create() по подразбиране генерира съобщения като Unicode низове; задайте unicodeStrings: false за съвместимост с наследени ANSI
  • SaveToEml() без аргументи връща byte[] — удобно за работни процеси в паметта

Чести проблеми

ПроблемПричинаРешение
CfbException при зарежданеНе е валиден CFB/MSG файлПроверете дали файлът е Outlook MSG
Празен Body след зарежданеТялото е съхранено само в HTMLПроверете message.HtmlBody вместо това
0 прикачени файла след LoadFromEmlEML няма Content-Disposition: attachment частиВградените части (само Content-ID) също се появяват в Attachments

Обобщение на API справка

ClassDescription
MapiMessageВисоко ниво представяне на MSG съобщение
MapiAttachmentПрикачен файл или вградено съобщение в MapiMessage
MapiRecipientПолучател в MapiMessage
MapiPropertyЕдиничен MAPI запис на свойство
MapiPropertyCollectionТипизирана MAPI колекция от свойства
CommonMessagePropertyIdИзброяване на стандартните идентификатори на MAPI свойства
MsgReaderНиско ниво четец на MSG структура
MsgWriterНиско ниво писател на MSG структура
CfbReaderЧетец на CFB бинарен контейнер
CfbWriterПисател на CFB бинарен контейнер
CfbDocumentCFB документ в паметта за конструиране
CfbStorageВъзел за съхранение в CFB документ
CfbStreamВъзел за поток в CFB документ
 Български