Savybės ir funkcionalumas

Savybės ir funkcionalumas

Savybės ir funkcionalumas

Šis puslapis apima visas pagrindines Aspose.Email FOSS for .NET funkcijas su veiksmais C# pavyzdžiais.


MSG failų skaitymas

Įkelkite MSG failą iš kelio arba srauto ir pasiekite visas jo savybes:

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

Naudokite strict: false, kad būtų švelnesnis nestandartinių MSG failų analizavimas:

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

Patikrinkite ValidationIssues, kad peržiūrėtumėte bet kokius formato įspėjimus be išmetimo:

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

MSG failų kūrimas

Sukurkite pilną el. laišką naudodami MapiMessage.Create() ir serializuokite naudodami 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() be argumentų grąžina byte[]. Save(path) tiesiogiai rašo į failo kelią.


Gavėjai

Pridėkite To, Cc ir Bcc gavėjus su AddRecipient():

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

Iteruokite gavėjus iš įkelto pranešimo:

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

Priedai

Pridėkite failų arba srauto priedus su metaduomenimis:

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

Skaityti priedus iš įkelto pranešimo:

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

Įterptų žinučių priedai

Prisegti vieną MapiMessage į kitą — dažnai pasitaiko persiunčiamuose el. laiškų grandinėse:

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

Skaityti įterptus pranešimo priedus:

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

EML ir MIME konvertavimas

Įkelkite RFC 5322 .eml failą į MapiMessage Outlook suderinamam saugojimui:

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

Konvertuoti atgal į EML iš MSG failo:

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

LoadFromEml() taip pat priima string kelią arba byte[]. SaveToEml() be argumentų grąžina byte[]. Tema, turinys, HTML turinys, siuntėjas, gavėjai ir visi priedai (įskaitant įterptus vaizdus su Content-ID) išlieka nepakitę per visus EML ↔ MSG keliones.


MAPI savybių prieiga

MapiPropertyCollection suteikia tipizuotą prieigą prie MAPI savybių per SetProperty() ir GetPropertyValue(). Naudokite CommonMessagePropertyId enum reikšmes standartinėms savybėms:

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 konteinerio prieiga

Outlook MSG failai yra sukurti pagal Compound File Binary (CFB) formatą. CfbReader atskleidžia visą katalogų medį patikrinimui ir duomenų išgavimui:

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

Sukurkite ir serializuokite CFB dokumentą nuo nulio naudodami 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);

Patarimai ir geriausios praktikos

  • Naudokite using arba Dispose() ant MapiMessage ir CfbReader norint atlaisvinti failų rankenėles
  • Patikrinkite message.ValidationIssues po įkėlimo, kad aptiktumėte nestandartinį MSG formatavimą
  • Parametras strict funkcijoje FromFile() / FromStream() kontroliuoja klaidų toleranciją — naudokite strict: false norint švelniai analizuoti failus iš trečiųjų šalių sistemų
  • MapiMessage.Create() pagal numatytuosius nustatymus generuoja Unicode eilutės pranešimus; nustatykite unicodeStrings: false senesnei ANSI suderinamumui
  • SaveToEml() be argumentų grąžina byte[] — patogu atminties viduje vykdomiems procesams

Bendros problemos

IssueCauseFix
CfbException kraunantNeteisingas CFB/MSG failasPatikrinkite, ar failas yra Outlook MSG
Tuščias Body po įkėlimoKūnas saugomas tik HTML formatuPatikrinkite message.HtmlBody vietoje
0 priedų po LoadFromEmlEML neturi Content-Disposition: attachment daliųĮterptos dalys (tik Content-ID) taip pat pasirodo Attachments

API nuorodų santrauka

ClassDescription
MapiMessageAukšto lygio MSG žinutės atvaizdavimas
MapiAttachmentPriedas arba įterpta žinutė ant MapiMessage
MapiRecipientGavėjas ant MapiMessage
MapiPropertyVienas MAPI savybės įrašas
MapiPropertyCollectionTipizuota MAPI savybių maišas
CommonMessagePropertyIdStandartinių MAPI savybių identifikatorių išvardinimas
MsgReaderŽemo lygio MSG struktūros skaitytojas
MsgWriterŽemo lygio MSG struktūros rašytojas
CfbReaderCFB dvejetainio konteinerio skaitytojas
CfbWriterCFB dvejetainio konteinerio rašytojas
CfbDocumentAtmintyje esantis CFB dokumentas konstrukcijai
CfbStorageSaugojimo mazgas CFB dokumente
CfbStreamSrauto mazgas CFB dokumente
 Lietuvių