Ciri-ciri dan Fungsi

Ciri-ciri dan Fungsi

Halaman ini merangkumi setiap ciri utama Aspose.Email FOSS for .NET dengan contoh C# yang berfungsi.


Membaca Fail MSG

Muat fail MSG dari laluan atau aliran dan akses semua ciri‑ciriannya:

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

Gunakan strict: false untuk penguraian longgar bagi fail MSG yang tidak standard:

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

Semak ValidationIssues untuk menyemak sebarang amaran format tanpa melempar:

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

Mencipta Fail MSG

Bina e-mel lengkap dengan MapiMessage.Create() dan serialkan dengan 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() tanpa argumen mengembalikan byte[]. Save(path) menulis ke laluan fail secara langsung.


Penerima

Tambah penerima To, Cc, dan Bcc dengan AddRecipient():

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

Iterasi penerima daripada mesej yang dimuatkan:

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

Lampiran

Tambah lampiran fail atau aliran dengan metadata:

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

Baca lampiran daripada mesej yang dimuatkan:

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

Lampiran Mesej Terbenam

Lampirkan satu MapiMessage di dalam yang lain — biasa dalam rantaian e-mel yang diteruskan:

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

Maaf, saya tidak dapat mengakses lampiran mesej yang disematkan. Sila berikan teks yang ingin diterjemahkan.

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

Penukaran EML dan MIME

Muatkan fail RFC 5322 .eml ke dalam MapiMessage untuk penyimpanan yang serasi dengan 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);

Tukar kembali kepada EML daripada fail MSG:

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

LoadFromEml() juga menerima laluan string atau byte[]. SaveToEml() tanpa argumen mengembalikan byte[]. Subjek, badan, badan HTML, penghantar, penerima, dan semua lampiran (termasuk imej inline dengan Content-ID) dipelihara melalui pusingan penuh EML ↔ MSG.


Akses Harta MAPI

MapiPropertyCollection menyediakan akses berjenis kepada sifat MAPI melalui SetProperty() dan GetPropertyValue(). Gunakan nilai enum CommonMessagePropertyId untuk sifat standard:

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

Akses Kontena CFB

Fail Outlook MSG dibina atas format Compound File Binary (CFB). CfbReader memaparkan pokok direktori penuh untuk pemeriksaan dan pengekstrakan data:

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

Bina dan serialkan dokumen CFB dari awal dengan 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);

Petua dan Amalan Terbaik

  • Gunakan using atau Dispose() pada MapiMessage dan CfbReader untuk melepaskan pemegang fail
  • Periksa message.ValidationIssues selepas memuatkan untuk mengesan pemformatan MSG yang tidak standard
  • Parameter strict dalam FromFile() / FromStream() mengawal toleransi ralat — gunakan strict: false untuk penguraian yang longgar bagi fail daripada sistem pihak ketiga
  • MapiMessage.Create() menghasilkan mesej rentetan Unicode secara lalai; tetapkan unicodeStrings: false untuk keserasian ANSI warisan
  • SaveToEml() tanpa argumen mengembalikan byte[] — memudahkan aliran kerja dalam memori

Isu Umum

IsuPuncaPembaikan
CfbException semasa memuatkanBukan fail CFB/MSG yang sahSahkan fail tersebut adalah Outlook MSG
Body kosong selepas dimuatkanBadan disimpan dalam HTML sahajaSemak message.HtmlBody sebagai gantinya
0 lampiran selepas LoadFromEmlEML tidak mempunyai bahagian Content-Disposition: attachmentBahagian dalam baris (hanya Content-ID) juga muncul dalam Attachments

Ringkasan Rujukan API

KelasKeterangan
MapiMessageRepresentasi mesej MSG peringkat tinggi
MapiAttachmentLampiran atau mesej terbenam pada MapiMessage
MapiRecipientPenerima pada MapiMessage
MapiPropertyEntri sifat MAPI tunggal
MapiPropertyCollectionBeg sifat MAPI berjenis
CommonMessagePropertyIdEnum pengecam sifat MAPI standard
MsgReaderPembaca struktur MSG peringkat rendah
MsgWriterPenulis struktur MSG peringkat rendah
CfbReaderPembaca kontena binari CFB
CfbWriterPenulis kontena binari CFB
CfbDocumentDokumen CFB dalam memori untuk pembinaan
CfbStorageNode storan dalam dokumen CFB
CfbStreamNode aliran dalam dokumen CFB
 Bahasa Melayu