Mbox-lagringsfiler

Att importera EML-meddelanden till en PST-fil är ett vanligt krav, särskilt för användare som migrerar mellan e-postklienter eller arkiverar e-post för lagring och säkerhetskopiering. PST-formatet bevarar strukturen, formateringen och bilagorna av innehållet, vilket gör det lämpligt för sömlös integration och hantering inom Outlook-applikationen. Den främsta fördelen med detta proprietära Microsoft-filformat är möjligheten att skapa lokala arkiv av e-postdata, vilket gör det möjligt att hantera och få tillgång till e-post, kontakter och annan relaterad information offline. I denna artikel kommer vi att utforska hur man enkelt och effektivt importerar EML till PST med hjälp av ett progressivt C#-bibliotek med kodexempel och steg.

.NET API för att hantera EML

Aspose.Email för .NET är ett robust och mångsidigt API som erbjuder en mängd funktioner för att arbeta med e-postmeddelanden och e-postservrar i .NET-applikationer. API:et möjliggör sömlös integration med populära e-postprotokoll och format, vilket gör det möjligt för utvecklare att skapa och manipulera e-postmeddelanden med lätthet.

En av de anmärkningsvärda funktionerna hos Aspose.Email är dess omfattande stöd för att konvertera e-post mellan olika format, inklusive överföring av EML till PST. Genom att utnyttja den rika uppsättningen av klasser och metoder som tillhandahålls av Aspose.Email kan utvecklare utföra komplexa e-postrelaterade uppgifter, såsom hantering av bilagor, hantering av mappar och konvertering av e-post mellan olika format. Innan du dyker in i koden behöver du integrera biblioteket i ditt C#-projekt. Du kan enkelt få det genom att ladda ner från Aspose-webbplatsen eller genom att använda NuGet.

Install-Package Aspose.Email

När biblioteket är en del av ditt projekt är du redo att börja koda.

Importera ett enda EML-meddelande till en PST-fil

Aspose.Email omfattande API tillhandahåller tydliga och intuitiva kodexempel och steg för att lägga till ett EML-meddelande till en PST-fil:

  1. Skapa en ny personlig lagringsfil med Create-metoden i PersonalStorage-klassen och ange filnamnet och formatversionen som parametrar.
  2. Skapa en fördefinierad “Inkorg”-mapp inom PST-filen med CreatePredefinedFolder-metoden i PersonalStorage-klassen och ange “Inkorg” som mappnamn och StandardIpmFolder.Inbox som mapptyp.
  3. Ladda ett e-postmeddelande från en fil med ‘Load’-metoden i MapiMessage-klassen och ange dess namn och en instans av EmlLoadOptions som parametrar.
  4. Lägg till det inladdade e-postmeddelandet i den tidigare skapade Inkorg-mappen inom PST-filen med AddMessage-metoden i FolderInfo-klassen.
using (var pst = PersonalStorage.Create("test.pst", FileFormatVersion.Unicode))
{
var inboxFolder = pst.CreatePredefinedFolder("Inbox", StandardIpmFolder.Inbox);
var msg = MapiMessage.Load("test.eml", new EmlLoadOptions());
inboxFolder.AddMessage(msg);
}

Som ett resultat skapas en ny personlig lagringsfil med namnet “test.pst”, meddelandet som laddades från filen “test.eml” läggs till Inkorg-mappen och är tillgängligt för ytterligare manipulation eller lagring.

Importera flera EML-meddelanden till en PST-fil

Aspose.Email gör det möjligt att lägga till en uppsättning meddelanden från en mapp till en PST-fil. AddMessages-metoden i FolderInfo-klassen gör att du kan importera mer än ett EML-meddelande till Inkorg-mappen inom en lagringsfil. Följande kodexempel visar hur du implementerar denna funktion i ditt projekt:

  1. Skapa en ny personlig lagringsfil med Create-metoden i PersonalStorage-klassen och ange filnamnet och formatversionen som parametrar.
  2. Skapa en fördefinierad “Inkorg”-mapp inom PST-filen med CreatePredefinedFolder-metoden i PersonalStorage-klassen och ange “Inkorg” som mappnamn och StandardIpmFolder.Inbox som mapptyp.
  3. Lägg till ett eller flera e-postmeddelanden från en mapp till den tidigare skapade Inkorg-mappen inom PST-filen med AddMessages-metoden i FolderInfo-klassen och ange ett MapiMessageEnumerator-objekt som representerar de meddelanden som ska importeras från den angivna mappvägen.
using (var pst = PersonalStorage.Create("test.pst", FileFormatVersion.Unicode))
{
var inboxFolder = pst.CreatePredefinedFolder("Inbox", StandardIpmFolder.Inbox);
inboxFolder.AddMessages(new MapiMessageEnumerator("PathToFolder"));
}

Här utnyttjar vi ‘MapiMessageEnumerator’ för att iterera över EML-filerna i källmappen och lägga till dem i PST-filen.

MapiMessage Enumerator-implementation

Med Aspose.Email kan du definiera ‘MapiMessageEnumerator’-klassen som implementerar IEnumerable-gränssnittet. Denna klass möjliggör iteration genom en samling av MapiMessage-objekt som representerar e-postmeddelanden, lagrade som .eml-filer i en angiven mapp. Enumerator-nästlad klass inom MapiMessageEnumerator fungerar som iterator, utför inladdningen av EML-filer som MapiMessage-objekt och hanterar iterationsprocessen. Den har metoder för att iterera genom filerna, avyttra resurser och återställa enumeratorn.

Följande kodexempel visar hur du kan iterera genom en samling av MapiMessages programmässigt:

  1. Definiera ‘MapiMessageEnumerator’-klassen som tar emot en ‘folderPath’-parameter, som anger katalogen där .eml-filer finns.
  2. Skapa och returnera en ny instans av ‘Enumerator’-klassen med ‘GetEnumerator’-metoden, genom att skicka mappvägen.
  3. Lagra ‘folderPath’ i ett fält och använd ‘IEnumerator’ för att iterera genom filvägarna inom mappen.
  4. När ‘Enumerator’-klassen konstrueras, initiera ‘folderPath’ och anropa ‘Reset()’-metoden för att förbereda ‘fileEnumerator’.
  5. Implementera ‘Current’-egenskapen och IEnumerator’s Current-egenskap uttryckligen.
  6. Tillhandahåll en ‘Dispose’-metod för att avyttra ‘fileEnumerator’ och det aktuella ‘MapiMessage’ om de finns.
  7. Använd ‘MoveNext’-metoden för att iterera genom filvägarna, försöka ladda en ‘MapiMessage’ från filen och logga eller hantera eventuella fel som uppstår.
  8. I ‘Reset’-metoden, avyttra ‘fileEnumerator’ och skapa en ny genom att enumerera .eml-filerna inom ‘folderPath’.
public class MapiMessageEnumerator : IEnumerable<MapiMessage>
{
private readonly string folderPath;
public MapiMessageEnumerator(string folderPath)
{
this.folderPath = folderPath;
}
public IEnumerator<MapiMessage> GetEnumerator()
{
return new Enumerator(folderPath);
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
private class Enumerator : IEnumerator<MapiMessage>
{
private readonly string folderPath;
private IEnumerator<string> fileEnumerator;
public Enumerator(string folderPath)
{
this.folderPath = folderPath;
Reset();
}
public MapiMessage Current { get; private set; }
object IEnumerator.Current
{
get { return Current; }
}
public void Dispose()
{
fileEnumerator.Dispose();
Current?.Dispose();
}
public bool MoveNext()
{
while (fileEnumerator.MoveNext())
{
var filePath = fileEnumerator.Current;
try
{
Current?.Dispose(); // Dispose previous MailMessage if any
Current = MapiMessage.Load(filePath, new EmlLoadOptions());
return true;
}
catch (Exception ex)
{
// Log or handle the error
Console.WriteLine($"Failed to parse message: {ex.Message}");
}
}
return false;
}
public void Reset()
{
fileEnumerator?.Dispose();
fileEnumerator = Directory.EnumerateFiles(folderPath, "*.eml").GetEnumerator();
Current = null;
}
}
}

Slutsats

Sammanfattningsvis, oavsett om du migrerar mellan e-postklienter eller arkiverar e-postdata för lagring och säkerhetskopiering, erbjuder Aspose.Email för .NET en pålitlig och funktionsrik lösning för att överföra EML-filer till PST-format, vilket gör det till en effektiv och enkel process. Med intuitiva kodexempel och omfattande dokumentation kan utvecklare enkelt implementera denna viktiga funktionalitet i sina projekt. Dessutom erbjuder det gratis forumet ett samhällsdrivet stödsystem för eventuella frågor eller problem som kan uppstå under implementeringen. För mer information om API:ets högkvalitativa funktioner, besök våra referensresurser.

Se även