Ανάγνωση αρχείων MSG
Ανάγνωση αρχείων MSG
Το Aspose.Email FOSS για .NET παρέχει τρία επίπεδα πρόσβασης για την ανάγνωση αρχείων Outlook .msg: το υψηλού επιπέδου MapiMessage API, το μεσαίου επιπέδου MsgDocument/MsgReader και το χαμηλού επιπέδου CfbReader για ακατέργαστη δυαδική επιθεώρηση.
Υψηλού επιπέδου: MapiMessage
MapiMessage είναι η κύρια κλάση για την ανάγνωση αρχείων MSG. Εκθέτει ιδιότητες με ισχυρούς τύπους για όλα τα τυπικά πεδία email.
Φόρτωση από αρχείο ή ροή
using Aspose.Email.Foss.Msg;
// From file path
using var message = MapiMessage.FromFile("sample.msg");
// From stream
using var stream = File.OpenRead("sample.msg");
using var message2 = MapiMessage.FromStream(stream);Η προαιρετική παράμετρος strict ελέγχει τη συμπεριφορά επικύρωσης:
// Strict mode — populates ValidationIssues but does not throw
using var message = MapiMessage.FromFile("sample.msg", strict: true);
foreach (var issue in message.ValidationIssues)
Console.WriteLine($"Warning: {issue}");Πρόσβαση σε Πεδία Μηνύματος
Console.WriteLine($"Subject: {message.Subject}");
Console.WriteLine($"Body: {message.Body}");
Console.WriteLine($"HTML Body: {message.HtmlBody}");
Console.WriteLine($"From: {message.SenderName} <{message.SenderEmailAddress}>");
Console.WriteLine($"Message-ID: {message.InternetMessageId}");
Console.WriteLine($"Date: {message.MessageDeliveryTime}");
Console.WriteLine($"Message Class: {message.MessageClass}");Ανάγνωση Παραληπτών
foreach (var recipient in message.Recipients)
{
var type = recipient.RecipientType switch
{
MapiMessage.RecipientTypeTo => "To",
MapiMessage.RecipientTypeCc => "Cc",
MapiMessage.RecipientTypeBcc => "Bcc",
_ => "Unknown"
};
Console.WriteLine($" {type}: {recipient.DisplayName} <{recipient.EmailAddress}>");
}Διαβάστε τα Συνημμένα
foreach (var attachment in message.Attachments)
{
Console.WriteLine($" {attachment.Filename} ({attachment.MimeType})");
if (attachment.IsEmbeddedMessage)
{
Console.WriteLine($" Embedded subject: {attachment.EmbeddedMessage!.Subject}");
}
else
{
File.WriteAllBytes(attachment.Filename!, attachment.Data);
}
}Μεσαίου Επιπέδου: MsgDocument και MsgReader
MsgDocument παρέχει πρόσβαση στο δέντρο αποθήκευσης MSG — αποθηκευτικά μέσα, ροές, παραλήπτες και συνημμένα ως δομικά στοιχεία.
using Aspose.Email.Foss.Msg;
var document = MsgDocument.FromFile("sample.msg");
// Navigate storages by role
foreach (var storage in document.Root.Storages)
{
Console.WriteLine($"{storage.Name} — role: {storage.Role}");
if (storage.Role == MsgStorageRole.Recipient)
Console.WriteLine(" (recipient storage)");
else if (storage.Role == MsgStorageRole.Attachment)
Console.WriteLine(" (attachment storage)");
}MsgReader δίνει πρόσβαση μόνο για ανάγνωση με επικύρωση:
using var reader = MsgReader.FromFile("sample.msg", strict: true);
Console.WriteLine($"Validation issues: {reader.ValidationIssues.Count}");Χαμηλού επιπέδου: CfbReader
Για ακατέργαστη δυαδική επιθεώρηση, χρησιμοποιήστε CfbReader για να διασχίσετε το κοντέινερ CFB απευθείας:
using Aspose.Email.Foss.Cfb;
using var reader = CfbReader.FromFile("sample.msg");
// Traverse the full directory tree
foreach (var (depth, entry) in reader.IterTree())
{
var indent = new string(' ', depth * 2);
Console.WriteLine($"{indent}{entry.Name} [type={entry.ObjectType}, size={entry.StreamSize}]");
}
// Read raw stream data
var rootChildren = reader.IterChildren(CfbConstants.RootStreamId);
foreach (var entry in rootChildren)
{
if (entry.IsStream())
{
var data = reader.GetStreamData(entry.StreamId);
Console.WriteLine($"{entry.Name}: {data.Length} bytes");
}
}Δείτε επίσης
- Χαρακτηριστικά — Πλήρης αναφορά χαρακτηριστικών
- Μετατροπή EML — Μετατροπή μεταξύ EML και MSG
- CFB Containers — Πρόσβαση χαμηλού επιπέδου σε δυαδικά CFB