Εισαγωγή
Aspose.Email FOSS for .NET είναι μια βιβλιοθήκη C# αδειοδοτημένη με MIT, χωρίς εξαρτήσεις, για εργασία με
αρχεία Outlook MSG, δοχεία Compound File Binary (CFB) και μηνύματα EML. Αυτή η ανάρτηση εξετάζει
κάθε κύρια περιοχή λειτουργιών με λειτουργικά παραδείγματα κώδικα που προέρχονται απευθείας από το
σύνολο δοκιμών της βιβλιοθήκης — κάθε όνομα κλάσης και υπογραφή μεθόδου που εμφανίζονται εδώ έχουν επαληθευτεί έναντι του
source repository.
Εγκατάσταση με μία μόνο εντολή — χωρίς Microsoft Outlook, χωρίς COM interop, χωρίς εγγενείς βιβλιοθήκες:
dotnet add package Aspose.Email.Foss
Κύρια Χαρακτηριστικά
Διαβάστε και Επιθεωρήστε Αρχεία MSG
MapiMessage.FromStream() και MapiMessage.FromFile() ανοίγουν οποιοδήποτε αρχείο Outlook .msg και
αποκαλύπτουν το πλήρες περιεχόμενό του: θέμα, σώμα απλού κειμένου, σώμα HTML, όνομα αποστολέα, διεύθυνση email
αποστολέα, χρόνο παράδοσης, ID μηνύματος στο διαδίκτυο, παραλήπτες και συνημμένα. Δεν απαιτείται εγκατάσταση Outlook
— η ολόκληρη στρώση MSG και CFB υλοποιείται σε διαχειριζόμενη C#.
using System.IO;
using Aspose.Email.Foss.Msg;
using var stream = File.OpenRead("sample.msg");
var message = MapiMessage.FromStream(stream);
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.Body);
foreach (var recipient in message.Recipients)
Console.WriteLine($"To: {recipient.EmailAddress}");
foreach (var attachment in message.Attachments)
Console.WriteLine($"Attachment: {attachment.Filename} ({attachment.MimeType})");
Δημιουργία αρχείων MSG από το μηδέν
MapiMessage.Create() δημιουργεί ένα πλήρες email στη μνήμη. Ορίστε SenderName,
SenderEmailAddress, HtmlBody, InternetMessageId και MessageDeliveryTime ως
ιδιότητες μετά τη δημιουργία, στη συνέχεια προσθέστε παραλήπτες με AddRecipient() και συνημμένα αρχείου ή ροής
με AddAttachment(). Σειριοποιήστε με message.Save() — επιστρέφει ένα byte[]
ή γράφει απευθείας σε διαδρομή ή Stream.
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");
message.AddAttachment("note.txt", "abc"u8.ToArray(), "text/plain");
using var output = File.Create("hello.msg");
message.Save(output);
Μετατροπή EML σε MSG (και αντίστροφα)
MapiMessage.LoadFromEml() δέχεται μια διαδρομή αρχείου, ένα Stream ή ένα byte[] που περιέχει ένα
τυπικό μήνυμα RFC 5322 / MIME. Ο ενσωματωμένος αναλυτής MIME διατηρεί το θέμα, το κείμενο απλού κειμένου,
το σώμα HTML, τον αποστολέα, τους παραλήπτες και όλα τα συνημμένα — συμπεριλαμβανομένων των ενσωματωμένων εικόνων μεContent-ID κεφαλίδες. SaveToEml() σειριοποιεί ξανά σε MIME για πλήρεις μετατροπές EML ↔ MSG
χωρίς καμία εξωτερική βιβλιοθήκη MIME.
using System.IO;
using Aspose.Email.Foss.Msg;
using var input = File.OpenRead("message.eml");
var message = MapiMessage.LoadFromEml(input);
// Inspect fields parsed from MIME headers
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.HtmlBody);
// Save as MSG for Outlook-compatible storage
using var msgOutput = File.Create("message.msg");
message.Save(msgOutput);
// Round-trip back to EML
using var emlOutput = File.Create("roundtrip.eml");
message.SaveToEml(emlOutput);
Ενσωματωμένα Συνημμένα Μηνύματος
Ένα αρχείο MSG μπορεί να περιέχει άλλο αρχείο MSG ως συνημμένο — ένα κοινό μοτίβο σε προωθημένες αλυσίδες email. AddEmbeddedMessageAttachment() επισυνάπτει ένα αντικείμενο MapiMessage ως ενσωματωμένο συνημμένο .msg. Κατά την ανάγνωση, MapiAttachment.IsEmbeddedMessage υποδεικνύει τον ενσωματωμένο τύπο και EmbeddedMessage εκθέτει το ενσωματωμένο MapiMessage άμεσα.
using System.IO;
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");
var attachment = loaded.Attachments[0];
if (attachment.IsEmbeddedMessage)
Console.WriteLine($"Embedded subject: {attachment.EmbeddedMessage!.Subject}");
Ανάγνωση και Εγγραφή CFB Container
Τα αρχεία Outlook MSG δημιουργούνται με τη μορφή Compound File Binary (CFB) — ένα ιεραρχικό δυαδικό κοντέινερ παρόμοιο με ένα σύστημα αρχείων FAT. CfbReader εκθέτει το πλήρες δέντρο καταλόγου: διατρέξτε αποθηκευτικούς χώρους και ροές με IterChildren(), πλοηγηθείτε σε συγκεκριμένες καταχωρήσεις με αλυσίδα διαδρομής με ResolvePath(), και διαβάστε ακατέργαστα bytes ροής με GetStreamData(). CfbWriter.ToBytes() σειριοποιεί ένα CfbDocument σε bytes — χρήσιμο για τη δημιουργία προσαρμοσμένων εγγράφων CFB ή για την επαλήθευση απώλειας‑μη‑απώλειας στρογγυλών μετατροπών.
using System.Text;
using Aspose.Email.Foss.Cfb;
// Build a CFB document from scratch
var document = new CfbDocument();
document.Root.AddStream(new CfbStream("ReadMe", 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);
// Read it back
using var reader = new CfbReader(bytes);
var entry = reader.ResolvePath(["DataStore", "Payload"]);
if (entry is not null)
{
var data = reader.GetStreamData(entry.StreamId);
Console.WriteLine(Encoding.UTF8.GetString(data)); // "content"
}
Πρόσβαση σε Ιδιότητες MAPI με Τύπο
MapiPropertyCollection παρέχει τυποποιημένη πρόσβαση σε ιδιότητες MAPI για οποιοδήποτε αντικείμενο MSG ή αποθήκευσης.
Η CommonMessagePropertyId enum καλύπτει όλους τους τυπικούς ταυτοποιητές ιδιοτήτων MAPI — Subject,Body, BodyHtml, SenderName, SenderEmailAddress, MessageDeliveryTime,InternetMessageId, και τις ιδιότητες συνημμένων που περιλαμβάνουν AttachFilename, AttachMimeTag,
και AttachContentId. Χρησιμοποιήστε SetProperty() και GetPropertyValue() για ανάγνωση και εγγραφή
αυθαίρετων ιδιοτήτων πέρα από τα ονομαστικά πεδία ευκολίας στο MapiMessage.
using Aspose.Email.Foss.Msg;
var message = MapiMessage.FromFile("sample.msg");
// Typed 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}");
Γρήγορη εκκίνηση
dotnet add package Aspose.Email.Foss
using System.IO;
using Aspose.Email.Foss.Msg;
// Read an MSG file
using var stream = File.OpenRead("sample.msg");
var message = MapiMessage.FromStream(stream);
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
foreach (var recipient in message.Recipients)
Console.WriteLine($"To: {recipient.EmailAddress}");
foreach (var attachment in message.Attachments)
Console.WriteLine($"Attachment: {attachment.Filename} ({attachment.MimeType})");
Υποστηριζόμενες Μορφές
| Μορφή | Επέκταση | Ανάγνωση | Εγγραφή |
|---|---|---|---|
| Compound File Binary | .cfb | ✓ | ✓ |
| Outlook Message | .msg | ✓ | ✓ |
| MIME / EML | .eml | ✓ | ✓ |
Ανοιχτός Κώδικας & Άδειες
Το Aspose.Email FOSS για .NET κυκλοφορεί υπό την άδεια MIT. Χρησιμοποιήστε το ελεύθερα σε προσωπικά, εμπορικά και ανοιχτού κώδικα έργα χωρίς περιορισμούς χρήσης. Ο πηγαίος κώδικας είναι διαθέσιμος στο github.com/aspose-email-foss/Aspose.Email-FOSS-for-.Net.