Χαρακτηριστικά και Λειτουργίες

Χαρακτηριστικά και Λειτουργίες

Χαρακτηριστικά και Λειτουργίες

Αυτή η σελίδα καλύπτει κάθε κύρια λειτουργία του Aspose.Email FOSS for .NET με λειτουργικά παραδείγματα C#.


Ανάγνωση αρχείων MSG

Φορτώστε ένα αρχείο MSG από διαδρομή ή ροή και αποκτήστε πρόσβαση σε όλες τις ιδιότητές του:

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

Χρησιμοποιήστε strict: false για χαλαρή ανάλυση μη τυποποιημένων αρχείων MSG:

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

Ελέγξτε ValidationIssues για να ελέγξετε τυχόν προειδοποιήσεις μορφής χωρίς να ρίξετε:

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

Δημιουργία αρχείων MSG

Δημιουργήστε ένα πλήρες email με MapiMessage.Create() και σειριοποιήστε το με 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() χωρίς ορίσματα επιστρέφει ένα byte[].
Save(path) γράφει απευθείας σε διαδρομή αρχείου.


Παραλήπτες

Προσθέστε To, Cc και Bcc παραλήπτες με AddRecipient():

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

Επανάληψη παραληπτών από ένα φορτωμένο μήνυμα:

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

Συνημμένα

Προσθήκη συνημμένων αρχείων ή ροής με μεταδεδομένα:

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

Ανάγνωση συνημμένων από ένα φορτωμένο μήνυμα:

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

Ενσωματωμένα Συνημμένα Μηνύματος

Επισυνάψτε ένα MapiMessage μέσα σε άλλο — κοινό σε αλυσίδες προωθημένων email:

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

Διαβάστε τα ενσωματωμένα συνημμένα μηνύματα:

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

Μετατροπή EML και MIME

Φορτώστε ένα αρχείο RFC 5322 .eml σε ένα MapiMessage για αποθήκευση συμβατή με το 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);

Μετατροπή πίσω σε EML από αρχείο MSG:

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

LoadFromEml() δέχεται επίσης μια διαδρομή string ή byte[]. SaveToEml() χωρίς ορίσματα επιστρέφει ένα byte[]. Το θέμα, το σώμα, το HTML σώμα, ο αποστολέας, οι παραλήπτες και όλα τα συνημμένα (συμπεριλαμβανομένων των ενσωματωμένων εικόνων με Content-ID) διατηρούνται σε πλήρεις μετατροπές EML ↔ MSG.


Πρόσβαση σε Ιδιότητα MAPI

MapiPropertyCollection παρέχει τυποποιημένη πρόσβαση στις ιδιότητες MAPI μέσω SetProperty() και GetPropertyValue(). Χρησιμοποιήστε τις τιμές enum CommonMessagePropertyId για τις τυπικές ιδιότητες:

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 Container

Τα αρχεία Outlook MSG δημιουργούνται με τη μορφή Compound File Binary (CFB). CfbReader εκθέτει το πλήρες δέντρο καταλόγου για επιθεώρηση και εξαγωγή δεδομένων:

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

Δημιουργήστε και σειριοποιήστε ένα έγγραφο CFB από το μηδέν με 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);

Συμβουλές και βέλτιστες πρακτικές

  • Χρησιμοποιήστε using ή Dispose() στο MapiMessage και CfbReader για να απελευθερώσετε τους χειριστές αρχείων
  • Ελέγξτε message.ValidationIssues μετά τη φόρτωση για να εντοπίσετε μη τυπική μορφοποίηση MSG
  • Η παράμετρος strict στο FromFile() / FromStream() ελέγχει την ανοχή σφαλμάτων — χρησιμοποιήστε strict: false για πιο χαλαρή ανάλυση αρχείων από τρίτα συστήματα
  • MapiMessage.Create() παράγει μηνύματα Unicode-συμβολοσειράς από προεπιλογή· ορίστε unicodeStrings: false για συμβατότητα με παλαιότερο ANSI
  • SaveToEml() χωρίς ορίσματα επιστρέφει byte[] — βολικό για ροές εργασίας στη μνήμη

Κοινά προβλήματα

ΠρόβλημαΑιτίαΔιόρθωση
CfbException κατά τη φόρτωσηΜη έγκυρο αρχείο CFB/MSGΕπαληθεύστε ότι το αρχείο είναι Outlook MSG
Κενό Body μετά τη φόρτωσηΤο σώμα αποθηκεύεται μόνο σε HTMLΕλέγξτε message.HtmlBody αντ’ αυτού
0 συνημμένα μετά το LoadFromEmlΤο EML δεν έχει μέρη Content-Disposition: attachmentΤα ενσωματωμένα μέρη (μόνο Content-ID) εμφανίζονται επίσης στο Attachments

Σύνοψη Αναφοράς API

ΚλάσηΠεριγραφή
MapiMessageΑναπαράσταση μηνύματος MSG υψηλού επιπέδου
MapiAttachmentΣυνημμένο ή ενσωματωμένο μήνυμα σε ένα MapiMessage
MapiRecipientΠαραλήπτης σε ένα MapiMessage
MapiPropertyΜονή καταχώρηση ιδιότητας MAPI
MapiPropertyCollectionΤυποποιημένο δοχείο ιδιοτήτων MAPI
CommonMessagePropertyIdΑπαρίθμηση τυπικών αναγνωριστών ιδιοτήτων MAPI
MsgReaderΑναγνώστης δομής MSG χαμηλού επιπέδου
MsgWriterΣυγγραφέας δομής MSG χαμηλού επιπέδου
CfbReaderΑναγνώστης δυαδικού κοντέινερ CFB
CfbWriterΣυγγραφέας δυαδικού κοντέινερ CFB
CfbDocumentΈγγραφο CFB στη μνήμη για κατασκευή
CfbStorageΚόμβος αποθήκευσης σε ένα έγγραφο CFB
CfbStreamΚόμβος ροής σε ένα έγγραφο CFB
 Ελληνικά