
- .NET API для управления EML
- Импорт одного сообщения EML в файл PST
- Импорт нескольких сообщений EML в файл PST
Импортирование сообщений EML в файл PST является распространенной задачей, особенно для пользователей, мигрирующих между почтовыми клиентами или архивирующих электронные письма для хранения и резервного копирования. Формат PST сохраняет структуру, форматирование и вложения содержимого, что делает его подходящим для бесшовной интеграции и управления в приложении Outlook. Основное преимущество этого проприетарного формата файла Microsoft заключается в способности создавать локальные архивы данных электронной почты, что позволяет управлять и получать доступ к электронным письмам, контактам и другой связанной информации в оффлайн-режиме. В этой статье мы рассмотрим, как легко и эффективно импортировать EML в PST с использованием прогрессивной библиотеки C# с примерами кода и шагами.
.NET API для управления EML
Aspose.Email для .NET — это надежный и универсальный API, который предлагает широкий спектр функций для работы с сообщениями электронной почты и почтовыми серверами в .NET приложениях. API обеспечивает бесшовную интеграцию с популярными почтовыми протоколами и форматами, позволяя разработчикам легко создавать и манипулировать сообщениями электронной почты.
Одной из примечательных особенностей Aspose.Email является его обширная поддержка преобразования электронной почты между различными форматами, включая передачу EML в PST. Используя богатый набор классов и методов, предоставляемых Aspose.Email, разработчики могут выполнять сложные задачи, связанные с электронной почтой, такие как работа с вложениями, управление папками и конвертация электронной почты между различными форматами. Прежде чем приступить к коду, вам нужно интегрировать библиотеку в ваш проект на C#. Вы можете легко получить ее, скачав с сайта Aspose или воспользовавшись NuGet.
Install-Package Aspose.Email
После того как библиотека станет частью вашего проекта, вы готовы начать кодирование.
Импорт одного сообщения EML в файл PST
Всеобъемлющий API Aspose.Email предоставляет простые и интуитивно понятные примеры кода и шаги для добавления сообщения EML в файл PST:
- Создайте новый файл личного хранилища, используя метод Create класса PersonalStorage, указав имя файла и версию формата в качестве параметров.
- Создайте предопределенную папку “Входящие” в файле PST, используя метод CreatePredefinedFolder класса PersonalStorage, указав “Входящие” в качестве имени папки и StandardIpmFolder.Inbox в качестве типа папки.
- Загрузите сообщение электронной почты из файла, используя метод ‘Load’ класса MapiMessage, указав его имя и экземпляр EmlLoadOptions в качестве параметров.
- Добавьте загруженное сообщение электронной почты в ранее созданную папку Входящие в файле PST с помощью метода AddMessage класса FolderInfo.
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); | |
} |
В результате создается новый файл личного хранилища с именем “test.pst”, сообщение, загруженное из файла “test.eml”, добавляется в папку Входящие и доступно для дальнейшей манипуляции или хранения.
Импорт нескольких сообщений EML в файл PST
Aspose.Email позволяет добавлять набор сообщений из папки в файл PST. Метод AddMessages класса FolderInfo позволяет вам импортировать более одного сообщения EML в папку Входящие в файле хранилища. Следующий пример кода покажет вам, как реализовать эту функцию в вашем проекте:
- Создайте новый файл личного хранилища, используя метод Create класса PersonalStorage, указав имя файла и версию формата в качестве параметров.
- Создайте предопределенную папку “Входящие” в файле PST, используя метод CreatePredefinedFolder класса PersonalStorage, указав “Входящие” в качестве имени папки и StandardIpmFolder.Inbox в качестве типа папки.
- Добавьте одно или несколько сообщений электронной почты из папки в ранее созданную папку Входящие в файле PST, используя метод AddMessages класса FolderInfo, указав объект MapiMessageEnumerator, который представляет сообщения для импорта из указанного пути к папке.
using (var pst = PersonalStorage.Create("test.pst", FileFormatVersion.Unicode)) | |
{ | |
var inboxFolder = pst.CreatePredefinedFolder("Inbox", StandardIpmFolder.Inbox); | |
inboxFolder.AddMessages(new MapiMessageEnumerator("PathToFolder")); | |
} |
Здесь мы используем ‘MapiMessageEnumerator’ для итерации по EML файлам в исходной папке и добавляем их в файл PST.
Реализация перечислителя MapiMessage
С помощью Aspose.Email вы можете определить класс ‘MapiMessageEnumerator’, который реализует интерфейс IEnumerable. Этот класс позволяет итерацию по коллекции объектов MapiMessage, представляющих сообщения электронной почты, хранящиеся в виде .eml файлов в указанной папке. Вложенный класс Enumerator внутри MapiMessageEnumerator служит в качестве итератора, выполняя загрузку EML файлов в виде объектов MapiMessage и управляя процессом итерации. Он имеет методы для итерации по файлам, освобождения ресурсов и сброса перечислителя.
Следующий пример кода покажет вам, как итеративно обрабатывать коллекцию MapiMessages программно:
- Определите класс ‘MapiMessageEnumerator’, принимающий параметр ‘folderPath’, который указывает каталог, где находятся .eml файлы.
- Создайте и верните новый экземпляр класса ‘Enumerator’, используя метод ‘GetEnumerator’, передав путь к папке.
- Сохраните ‘folderPath’ в поле и используйте ‘IEnumerator’ для итерации по путям файлов в папке.
- Когда класс ‘Enumerator’ создается, инициализируйте ‘folderPath’ и вызовите метод ‘Reset()’, чтобы подготовить ‘fileEnumerator’.
- Реализуйте свойство ‘Current’ и явно свойство Current интерфейса IEnumerator.
- Предоставьте метод ‘Dispose’, чтобы освободить ‘fileEnumerator’ и текущий ‘MapiMessage’, если они существуют.
- Используйте метод ‘MoveNext’, чтобы итеративно обрабатывать пути файлов, пытаться загрузить ‘MapiMessage’ из файла и регистрировать или обрабатывать любые ошибки, которые могут возникнуть.
- В методе ‘Reset’ освободите ‘fileEnumerator’ и создайте новый, перечисляя .eml файлы в ‘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; | |
} | |
} | |
} |
Заключение
В заключение, будь то миграция между почтовыми клиентами или архивирование данных электронной почты для хранения и резервного копирования, Aspose.Email для .NET предоставляет надежное и функционально насыщенное решение для передачи файлов EML в формат PST, что делает этот процесс эффективным и простым. С интуитивно понятными примерами кода и исчерпывающей документацией разработчики могут без труда реализовать эту необходимую функциональность в своих проектах. Кроме того, бесплатный форум предлагает сообщество для получения поддержки по любым вопросам или проблемам, которые могут возникнуть в процессе реализации. Чтобы получить дополнительную информацию о высоких функциональных возможностях API, пожалуйста, посетите наши ресурсы справки.