
- .NET API för att hantera EML
- Importera ett enda EML-meddelande till en PST-fil
- Importera flera EML-meddelanden till en PST-fil
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:
- Skapa en ny personlig lagringsfil med Create-metoden i PersonalStorage-klassen och ange filnamnet och formatversionen som parametrar.
- 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.
- 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.
- 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:
- Skapa en ny personlig lagringsfil med Create-metoden i PersonalStorage-klassen och ange filnamnet och formatversionen som parametrar.
- 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.
- 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:
- Definiera ‘MapiMessageEnumerator’-klassen som tar emot en ‘folderPath’-parameter, som anger katalogen där .eml-filer finns.
- Skapa och returnera en ny instans av ‘Enumerator’-klassen med ‘GetEnumerator’-metoden, genom att skicka mappvägen.
- Lagra ‘folderPath’ i ett fält och använd ‘IEnumerator’ för att iterera genom filvägarna inom mappen.
- När ‘Enumerator’-klassen konstrueras, initiera ‘folderPath’ och anropa ‘Reset()’-metoden för att förbereda ‘fileEnumerator’.
- Implementera ‘Current’-egenskapen och IEnumerator’s Current-egenskap uttryckligen.
- Tillhandahåll en ‘Dispose’-metod för att avyttra ‘fileEnumerator’ och det aktuella ‘MapiMessage’ om de finns.
- 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.
- 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.