
管理 EML 的 .NET API
将单个 EML 邮件导入 PST 文件
将多个 EML 邮件导入 PST 文件
MapiMessage 枚举器的实现
将 EML 邮件导入 PST 文件是一种常见的需求,尤其是对于在电子邮件客户端之间迁移或出于存储和备份目的而归档电子邮件的用户而言。PST 格式保留了内容的结构、格式和附件,适合在 Outlook 应用程序中进行无缝集成和管理。这种微软专有文件格式的主要优点是可以创建本地电子邮件数据存档,从而可以离线管理和访问电子邮件、联系人和其他相关信息。在本文中,我们将通过代码示例和步骤,探讨如何使用渐进式 C# 库轻松高效地将 EML 导入 PST。
管理 EML 的 .NET API
Aspose.Email for .NET是一款功能强大、用途广泛的API,可为.NET应用程序中的电子邮件和邮件服务器提供多种功能。该 API 与流行的电子邮件协议和格式实现了无缝集成,使开发人员能够轻松创建和处理电子邮件信息。
Aspose.Email 的显著特点之一是广泛支持在不同格式之间转换电子邮件,包括将 EML 转为 PST。通过利用 Aspose.Email 提供的丰富类和方法集,开发人员可以执行复杂的电子邮件相关任务,如处理附件、管理文件夹以及在各种格式之间转换电子邮件。在深入研究代码之前,您需要将该库集成到您的 C# 项目中。您可以从 Aspose 网站下载或使用 NuGet 轻松获得该库。
Install-Package Aspose.Email
一旦库成为项目的一部分,就可以开始编码了。
将单封 EML 邮件导入 PST 文件
Aspose.Email 综合 API 提供了简单直观的代码示例和步骤,可将 EML 邮件添加到 PST 文件中:
使用 PersonalStorage 类的 Create 方法创建新的个人存储文件,指定文件名和格式版本作为参数。
使用 PersonalStorage 类的 CreatePredefinedFolder 方法在 PST 文件中创建预定义的 "收件箱 "文件夹,指定 "收件箱 "为文件夹名称,StandardIpmFolder.Inbox 为文件夹类型。
使用 MapiMessage 类的 "Load "方法从文件加载电子邮件信息,将其名称和 EmlLoadOptions 实例指定为参数。
使用 FolderInfo 类的 AddMessage 方法将加载的电子邮件信息添加到 PST 文件中先前创建的收件箱文件夹。
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 文件中。FolderInfo 类的 AddMessages 方法允许您将多个 EML 邮件导入到存储文件的收件箱文件夹中。以下代码示例将向你展示如何在你的项目中实现这一功能:
使用 PersonalStorage 类的 Create 方法创建一个新的个人存储文件,并指定文件名和格式版本作为参数。
使用 PersonalStorage 类的 CreatePredefinedFolder 方法在 PST 文件中创建一个预定义的 "收件箱 "文件夹,指定 "收件箱 "为文件夹名称,StandardIpmFolder.Inbox 为文件夹类型。
使用 FolderInfo 类的 AddMessages 方法将一个或多个文件夹中的电子邮件信息添加到 PST 文件中先前创建的收件箱文件夹中,并指定一个 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,您可以定义实现 IEnumerable 接口的 "MapiMessageEnumerator "类。该类允许遍历 MapiMessage 对象集合,该集合代表电子邮件信息,以 .eml 文件形式存储在指定文件夹中。MapiMessageEnumerator 内的嵌套类 Enumerator 充当迭代器,将 EML 文件加载为 MapiMessage 对象并管理迭代过程。它拥有迭代文件、处置资源和重置枚举器的方法。
以下代码示例将向您展示如何以编程方式迭代 MapiMessage 集合:
定义 "MapiMessageEnumerator "类,接受 "文件夹路径 "参数,该参数表示 .eml 文件所在的目录。
使用 "GetEnumerator "方法创建并返回 "Enumerator "类的新实例,同时传递文件夹路径。
将 "文件夹路径 "存储在一个字段中,然后使用 "IEnumerator "遍历文件夹内的文件路径。
构建 "Enumerator "类时,初始化 "folderPath "并调用 "Reset() "方法来准备 "fileEnumerator"。
明确实现 "Current "属性和 IEnumerator 的 Current 属性。
如果存在 "fileEnumerator "和当前 "MapiMessage",提供一个 "Dispose "方法来处理它们。
使用 "MoveNext "方法遍历文件路径,尝试从文件加载 "MapiMessage",并记录或处理发生的任何错误。
在 "Reset "方法中,处理 "fileEnumerator",并通过枚举 "文件夹路径 "中的 .eml 文件创建一个新的 "fileEnumerator"。
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 for .NET 都能提供可靠且功能丰富的解决方案,将 EML 文件传输到 PST 格式,使其成为一个高效、简单的过程。通过直观的代码示例和全面的文档,开发人员可以毫不费力地在其项目中实现这一基本功能。要了解有关 API 高级代码功能的更多信息,请访问我们的参考资源。
渝公网安备50010702505508