Файлы хранения Mbox

Импортирование сообщений 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:

  1. Создайте новый файл личного хранилища, используя метод Create класса PersonalStorage, указав имя файла и версию формата в качестве параметров.
  2. Создайте предопределенную папку “Входящие” в файле PST, используя метод CreatePredefinedFolder класса PersonalStorage, указав “Входящие” в качестве имени папки и StandardIpmFolder.Inbox в качестве типа папки.
  3. Загрузите сообщение электронной почты из файла, используя метод ‘Load’ класса MapiMessage, указав его имя и экземпляр EmlLoadOptions в качестве параметров.
  4. Добавьте загруженное сообщение электронной почты в ранее созданную папку Входящие в файле 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 в папку Входящие в файле хранилища. Следующий пример кода покажет вам, как реализовать эту функцию в вашем проекте:

  1. Создайте новый файл личного хранилища, используя метод Create класса PersonalStorage, указав имя файла и версию формата в качестве параметров.
  2. Создайте предопределенную папку “Входящие” в файле PST, используя метод CreatePredefinedFolder класса PersonalStorage, указав “Входящие” в качестве имени папки и StandardIpmFolder.Inbox в качестве типа папки.
  3. Добавьте одно или несколько сообщений электронной почты из папки в ранее созданную папку Входящие в файле 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 программно:

  1. Определите класс ‘MapiMessageEnumerator’, принимающий параметр ‘folderPath’, который указывает каталог, где находятся .eml файлы.
  2. Создайте и верните новый экземпляр класса ‘Enumerator’, используя метод ‘GetEnumerator’, передав путь к папке.
  3. Сохраните ‘folderPath’ в поле и используйте ‘IEnumerator’ для итерации по путям файлов в папке.
  4. Когда класс ‘Enumerator’ создается, инициализируйте ‘folderPath’ и вызовите метод ‘Reset()’, чтобы подготовить ‘fileEnumerator’.
  5. Реализуйте свойство ‘Current’ и явно свойство Current интерфейса IEnumerator.
  6. Предоставьте метод ‘Dispose’, чтобы освободить ‘fileEnumerator’ и текущий ‘MapiMessage’, если они существуют.
  7. Используйте метод ‘MoveNext’, чтобы итеративно обрабатывать пути файлов, пытаться загрузить ‘MapiMessage’ из файла и регистрировать или обрабатывать любые ошибки, которые могут возникнуть.
  8. В методе ‘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, пожалуйста, посетите наши ресурсы справки.

Смотрите также