Funkcijas un funkcionalitāte

Funkcijas un funkcionalitāte

Šī lapa aptver katru galveno Aspose.Email FOSS for .NET funkciju ar darbosjošiem C# piemēriem.


MSG failu lasīšana

Ielādēt MSG failu no ceļa vai plūsmas un piekļūt visām tā īpašībām:

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

Izmantojiet strict: false, lai veiktu tolerantu parsēšanu nestandarta MSG failiem:

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

Pārbaudiet ValidationIssues, lai pārskatītu visus formāta brīdinājumus, neizmetot:

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

MSG failu izveide

Izveidojiet pilnu e-pastu, izmantojot MapiMessage.Create(), un serializējiet, izmantojot 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 argumentiem atgriež byte[]. Save(path) raksta uz faila ceļu tieši.


Saņēmēji

Pievienot To, Cc un Bcc saņēmējus ar AddRecipient():

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

Iterēt saņēmējus no ielādēta ziņojuma:

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

Pielikumi

Pievienot faila vai straumes pielikumu ar metadatiem:

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

Lasīt pievienojumus no ielādēta ziņojuma:

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

Iegultie ziņojuma pielikumi

Pievienojiet vienu MapiMessage iekšā otram — tas ir bieži sastopams pārsūtītu e-pasta ķēdēs:

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

Lasīt iegultos ziņojuma pielikumus:

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

EML un MIME konvertēšana

Ielādēt RFC 5322 .eml failu MapiMessage Outlook‑savietojamai glabāšanai:

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

Konvertēt atpakaļ uz EML no MSG faila:

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

LoadFromEml() arī pieņem string ceļu vai byte[]. SaveToEml() bez argumentiem atgriež byte[]. Tēma, ķermenis, HTML ķermenis, sūtītājs, saņēmēji un visi pielikumi (iekļautie attēli ar Content-ID) tiek saglabāti pilnīgās EML ↔ MSG pārejas laikā.


MAPI īpašību piekļuve

MapiPropertyCollection nodrošina tipizētu piekļuvi MAPI īpašībām caur SetProperty() un GetPropertyValue(). Izmantojiet CommonMessagePropertyId enum vērtības standarta īpašībām:

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 konteineru piekļuve

Outlook MSG faili ir izveidoti uz Compound File Binary (CFB) formāta. CfbReader atklāj pilnu direktoriju koku pārbaudei un datu izguvei:

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

Izveidojiet un serializējiet CFB dokumentu no nulles ar 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);

Padomi un labākās prakses

  • Izmantojiet using vai Dispose() uz MapiMessage un CfbReader, lai atbrīvotu faila rokturus
  • Pārbaudiet message.ValidationIssues pēc ielādes, lai noteiktu nestandarta MSG formatējumu
  • Parametrs strict iekš FromFile() / FromStream() kontrolē kļūdu toleranci — izmantojiet strict: false, lai veiktu laužīgu parsēšanu failiem no trešo pušu sistēmām
  • MapiMessage.Create() pēc noklusējuma ģenerē Unicode virkņu ziņojumus; iestatiet unicodeStrings: false lai nodrošinātu mantoto ANSI saderību
  • SaveToEml() bez argumentiem atgriež byte[] — ērti atmiņā balstītiem darba plūsmām

Biežāk sastopamās problēmas

IssueCauseFix
CfbException ielādējotNav derīgs CFB/MSG failsPārbaudiet, vai fails ir Outlook MSG
Tukšs Body pēc ielādesĶermenis saglabāts tikai HTML formātāPārbaudiet message.HtmlBody tā vietā
0 pielikumi pēc LoadFromEmlEML nav Content-Disposition: attachment daļuIekļautās daļas (tikai Content-ID) arī parādās Attachments

API atsauces kopsavilkums

ClassDescription
MapiMessageAugsta līmeņa MSG ziņojuma reprezentācija
MapiAttachmentPielikums vai iegultais ziņojums uz MapiMessage
MapiRecipientSaņēmējs uz MapiMessage
MapiPropertyViena MAPI īpašības ieraksts
MapiPropertyCollectionTipizēts MAPI īpašību maisiņš
CommonMessagePropertyIdStandarta MAPI īpašību identifikatoru uzskaitījums
MsgReaderZema līmeņa MSG struktūras lasītājs
MsgWriterZema līmeņa MSG struktūras rakstītājs
CfbReaderCFB binārā konteineru lasītājs
CfbWriterCFB binārā konteineru rakstītājs
CfbDocumentAtmiņā esošs CFB dokuments konstrukcijai
CfbStorageGlabāšanas mezgls CFB dokumentā
CfbStreamPlūsmas mezgls CFB dokumentā
 Latviešu