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
usingvagyDispose()aMapiMessageésCfbReaderesetén a fájlkezelők felszabadításához - Ellenőrizze
message.ValidationIssuesbetöltés után a nem szabványos MSG formátum észleléséhez - A
strictparaméter aFromFile()/FromStream()‑ben szabályozza a hibatűrést — használjastrict: 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 beunicodeStrings: false‑t
a régi ANSI kompatibilitáshozSaveToEml()argumentumok nélkülbyte[]‑t ad vissza — kényelmes a memóriában történő munkafolyamatokhoz
Általános problémák
| Probléma | Ok | Javítás |
|---|---|---|
CfbException betöltéskor | Érvénytelen CFB/MSG fájl | Ellenőrizze, hogy a fájl Outlook MSG |
Üres Body betöltés után | A törzs csak HTML-ben van tárolva | Ellenőrizze helyette message.HtmlBody |
0 melléklet a LoadFromEml után | Az EML-nek nincs Content-Disposition: attachment része | A beágyazott részek (csak Content-ID) szintén megjelennek a Attachments‑ben |
API-referencia összefoglaló
| Osztály | Leírás |
|---|---|
MapiMessage | Magas szintű MSG üzenet reprezentáció |
MapiAttachment | Melléklet vagy beágyazott üzenet egy MapiMessage-on |
MapiRecipient | Címzett egy MapiMessage-on |
MapiProperty | Egyetlen MAPI tulajdonság bejegyzés |
MapiPropertyCollection | Típusos MAPI tulajdonság táska |
CommonMessagePropertyId | Standard MAPI tulajdonság azonosítók felsorolása |
MsgReader | Alacsony szintű MSG struktúra olvasó |
MsgWriter | Alacsony szintű MSG struktúra író |
CfbReader | CFB bináris konténer olvasó |
CfbWriter | CFB bináris konténer író |
CfbDocument | Memóriában lévő CFB dokumentum építéshez |
CfbStorage | Tároló csomópont egy CFB dokumentumban |
CfbStream | Adatfolyam csomópont egy CFB dokumentumban |