Uvod u članak

Programsko analiziranje e-pošte je uobičajen zahtjev za arhiviranja alata, usklađenosti cijevi i migracije korisnika. Outlook MSG datoteke koriste Compound File Binary (CFB) format kontejnera s MAPI svojstva tokova, dok EML datotekama slijediti MIME standard . Oba formata zahtijevaju pažljivo rukovanje kodiranja, sklopljene glave, i ugneštene prilozi.

Aspose.Email FOSS for .NET is a free, MIT-licensed C# library that provides a complete read-write API for MSG and EML messages. It targets .NET 8.0+ and has no dependency on Microsoft Outlook or any native COM interop layer. The library is available as the aspose.email.foss NuGet paket.

Ovaj post vodi kroz mogućnosti razmatranja poruka uključene u knjižnicu, od učitavanja datoteka s diska do ekstrakcije pojedinačnih svojstava MAPI-a i pretvaranja između formata.


Što je uključeno u to?

Upisivanje MSG datoteka

U skladu s člankom 1. MapiMessage class je primarna ulazna točka za rad s Outlook MSG datotekama. Možete učitati poruku iz puta ili toka datoteke, uz opcijsku zastavu stroge validacije koja otkriva bilo kakve strukturne probleme pronađene u datoteci.

// Load an MSG file from disk
var message = MapiMessage.FromFile("meeting-invite.msg");

Console.WriteLine($"Subject: {message.Subject}");
Console.WriteLine($"From: {message.SenderName} <{message.SenderEmailAddress}>");
Console.WriteLine($"Date: {message.MessageDeliveryTime}");
Console.WriteLine($"Recipients: {message.Recipients.Count}");
Console.WriteLine($"Attachments: {message.Attachments.Count}");

Vratiti se. MapiMessage Izloženost tipiranih svojstava za zajednička polja, uključujući: Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageId, i MessageDeliveryTime.

Upisivanje poruka EML-a

EML datoteke koriste MIME format. MapiMessage.LoadFromEml prihvaća putanje datoteke, a Stream,ili a) byte[] i vraća isti broj. MapiMessage objekt, tako da koristite jedan jedinstven API bez obzira na izvorni format.

// Load from a file path
var fromFile = MapiMessage.LoadFromEml("newsletter.eml");

// Load from a stream
using var stream = File.OpenRead("newsletter.eml");
var fromStream = MapiMessage.LoadFromEml(stream);

Console.WriteLine($"Subject: {fromStream.Subject}");
Console.WriteLine($"Body: {fromStream.Body?.Trim()}");

Parser upravlja preklopljenim zaglavljama, kodiranjem za prijenos baznih podataka Base64 i citiranih štampača te poljima To/Cc s više primatelja.

Rad s primateljima i prilozima

Nakon što se poruka učita, primatelji i prilozi su dostupni kao kolekcije sa snažnim tipom. MapiRecipient nosi EmailAddress, DisplayName, i RecipientType Svaka polja. MapiAttachment sadržava: Filename, Data, MimeType, i ContentId.

var message = MapiMessage.FromFile("report.msg");

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

foreach (var attachment in message.Attachments)
{
    Console.WriteLine($"  {attachment.Filename} ({attachment.MimeType}, {attachment.Data.Length} bytes)");
    File.WriteAllBytes(attachment.Filename!, attachment.Data);
}

Podržane su i priložene poruke. MapiAttachment.IsEmbeddedMessage je: true, u skladu s člankom EmbeddedMessage svojstvo vraća ugnezdenu MapiMessage koje možete pregledati rekurzivno.

Pristup svojstvima MAPI-a

Za napredne scenarije, svaka poruka, primalac i prilozi izloži Properties Sva vrsta proizvoda MapiPropertyCollection.Možete čitati, dodati i ukloniti pojedinačne MAPI svojstva po njihovom ID-u osobine i tipu koda.

var message = MapiMessage.FromFile("custom-props.msg");

// Iterate all properties on the message
foreach (var prop in message.Properties.IterProperties())
{
    Console.WriteLine($"Tag: 0x{prop.PropertyTag:X8}, Value: {prop.Value}");
}

// Read a specific property
var subject = message.Properties.Get(
    (ushort)CommonMessagePropertyId.Subject,
    (ushort)PropertyTypeCode.PtypString);

U skladu s člankom 1. CommonMessagePropertyId enum definiše dobro poznate MAPI identifikacijske svojstva za osnovnu semantiku poruke, polja tijela, transportne zaglavlje i metapodatke priloga.

Preobrazba između MSG-a i EML-ja

Proučena poruka može se spasiti u bilo kojem formatu. Save() Piše MSG bajtove, dok je to uobičajeno. SaveToEml() To čini konverziju formata jednostavnom.

// Load an EML and save as MSG
var message = MapiMessage.LoadFromEml("incoming.eml");
message.Save("converted.msg");

// Load an MSG and save as EML
var msg = MapiMessage.FromFile("outgoing.msg");
msg.SaveToEml("exported.eml");

Oba metoda također prihvaćaju i: Stream U ovom slučaju, u skladu s člankom 16. stavkom 1. točkom (a) i podstavkom 7. ovog članka.


Brzi početak

Instaliraj paket iz NuGet:

dotnet add package aspose.email.foss

Onda razradite prvu poruku:

using Aspose.Email.Foss.Msg;

// Load an MSG file
var message = MapiMessage.FromFile("sample.msg");

Console.WriteLine($"Subject:     {message.Subject}");
Console.WriteLine($"From:        {message.SenderName} <{message.SenderEmailAddress}>");
Console.WriteLine($"Date:        {message.MessageDeliveryTime}");
Console.WriteLine($"Body length: {message.Body?.Length ?? 0} chars");

// List attachments
foreach (var att in message.Attachments)
    Console.WriteLine($"  Attachment: {att.Filename} ({att.Data.Length} bytes)");

// Convert to EML
message.SaveToEml("sample.eml");
Console.WriteLine("Saved as EML.");

Podržani formati

Format:Proračunska sredstvaČitaj.Pišite.
Izvješće MSG.msg- Da, u redu.- Da, u redu.
MIME (EML).eml- Da, u redu.- Da, u redu.
Komponirana datoteka binarna.cfb- Da, u redu.- Da, u redu.

Otvoreni izvor i licenciranje

Aspose.Email FOSS for .NET is released under the MIT license. The full source code is available on GitHub at Službenici i korisnici koji su u skladu s člankom 7. stavkom 1. točkom (a) ovog članka..Doprinosi, pitanja i zahtjevi za povlačenjem su dobrodošli.


Početak