Jellemzők és funkciók

Jellemzők és funkciók

Ez az oldal lefedi az Aspose.Email FOSS for .NET minden fő funkcióját működő C# példákkal.


MSG fájlok olvasása

Töltsön be egy MSG fájlt útvonalról vagy adatfolyamból, és érje el annak összes tulajdonságát:

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

Használja a strict: false jelölést a nem szabványos MSG fájlok enyhe feldolgozásához:

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

Ellenőrizze ValidationIssues a formátumfigyelmeztetések megtekintéséhez kivétel dobása nélkül:

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

MSG fájlok létrehozása

Készíts egy teljes e‑mailt a MapiMessage.Create() segítségével, és sorosítsd a Save()‑val:

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() argumentumok nélkül visszaad egy byte[]. Save(path) közvetlenül egy fájl útvonalra ír.


Címzettek

Adjon hozzá To, Cc és Bcc címzetteket AddRecipient()‑val:

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

Címzettek bejárása betöltött üzenetből:

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

Mellékletek

Fájl vagy adatfolyam mellékletek hozzáadása metaadatokkal:

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

Mellékletek olvasása betöltött üzenetből:

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

Beágyazott üzenetcsatolmányok

Csatolj egy MapiMessage-t egy másikba — gyakori az előre továbbított e-mail láncokban:

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

Sajnálom, de nem tudok hozzáférni a beágyazott üzenetcsatolmányokhoz. Kérlek, másold be a szöveget ide, hogy lefordíthassam.

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

EML és MIME konverzió

Töltsön be egy RFC 5322 .eml fájlt egy MapiMessage‑ba az Outlook‑kompatibilis tároláshoz:

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

Visszaalakítás EML-re egy MSG fájlból:

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

LoadFromEml() elfogad egy string útvonalat vagy byte[]. SaveToEml() argumentumok nélkül egy byte[]-t ad vissza. A tárgy, a szöveg, a HTML-szöveg, a feladó, a címzettek és minden melléklet (beleértve a beágyazott képeket a Content-ID-vel) megmarad a teljes EML ↔ MSG körutakon.


MAPI tulajdonság elérése

MapiPropertyCollection típusos hozzáférést biztosít a MAPI tulajdonságokhoz a SetProperty() és a GetPropertyValue() segítségével. Használja a CommonMessagePropertyId felsorolt értékeket a szabványos tulajdonságokhoz:

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 tároló hozzáférés

Az Outlook MSG fájlok a Compound File Binary (CFB) formátumra épülnek. CfbReader a teljes könyvtárfát teszi elérhetővé ellenőrzéshez és adatkinyeréshez:

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

Építsen és sorosítson egy CFB dokumentumot a semmiből a CfbWriter segítségével:

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

Tippek és bevált gyakorlatok

  • Használja using vagy Dispose() a MapiMessage és CfbReader esetén a fájlkezelők felszabadításához
  • Ellenőrizze message.ValidationIssues betöltés után a nem szabványos MSG formátum észleléséhez
  • A strict paraméter a FromFile() / FromStream()‑ben szabályozza a hibatűrést — használja
    strict: false‑t a harmadik féltől származó rendszerek fájljainak engedékeny feldolgozásához
  • MapiMessage.Create() alapértelmezés szerint Unicode-karakterlánc üzeneteket állít elő; állítsa be unicodeStrings: false‑t
    a régi ANSI kompatibilitáshoz
  • SaveToEml() argumentumok nélkül byte[]‑t ad vissza — kényelmes a memóriában történő munkafolyamatokhoz

Általános problémák

ProblémaOkJavítás
CfbException betöltéskorÉrvénytelen CFB/MSG fájlEllenőrizze, hogy a fájl Outlook MSG
Üres Body betöltés utánA törzs csak HTML-ben van tárolvaEllenőrizze helyette message.HtmlBody
0 melléklet a LoadFromEml utánAz EML-nek nincs Content-Disposition: attachment részeA beágyazott részek (csak Content-ID) szintén megjelennek a Attachments‑ben

API-referencia összefoglaló

OsztályLeírás
MapiMessageMagas szintű MSG üzenet reprezentáció
MapiAttachmentMelléklet vagy beágyazott üzenet egy MapiMessage-on
MapiRecipientCímzett egy MapiMessage-on
MapiPropertyEgyetlen MAPI tulajdonság bejegyzés
MapiPropertyCollectionTípusos MAPI tulajdonság táska
CommonMessagePropertyIdStandard MAPI tulajdonság azonosítók felsorolása
MsgReaderAlacsony szintű MSG struktúra olvasó
MsgWriterAlacsony szintű MSG struktúra író
CfbReaderCFB bináris konténer olvasó
CfbWriterCFB bináris konténer író
CfbDocumentMemóriában lévő CFB dokumentum építéshez
CfbStorageTároló csomópont egy CFB dokumentumban
CfbStreamAdatfolyam csomópont egy CFB dokumentumban
 Magyar