借助Aspose.Email,使用 PowerShell 和 .NET 将 MSG 转换为 EML

如果您希望优化电子邮件工作流程或开发自定义电子邮件解决方案,那么这篇博文适合您。我们将以转换电子邮件格式和提取附件为例,探讨如何结合使用 PowerShell 和Aspose.Email for .NET来自动执行各种电子邮件处理任务。通过将这些工具集成到您的工作流程中,您可以节省时间、减少人工工作量并提高电子邮件管理流程的准确性和效率。

电子邮件管理通常涉及处理不同的文件格式,并且这些格式之间的转换可以出于兼容性和存档目的。

Aspose.Email 是用于轻松的开发 email 功能的应用程序的一组控件,基于 ASP.NET 的Web应用、Web服务和Windows 应用。支持 Outlook PST, EML, MSG, and MHT 格式. 允许开发者直接与 SMTP, POP, FTP, 和 MS Exchange 服务器进行工作。支持邮件合并、行事历、定制邮件标题和内容、嵌入文件等,Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格式和最常用的图像/多媒体格式。

为什么使用 PowerShell?

PowerShell 是一种与 .NET 框架完美集成的脚本语言。它广泛适用于 Windows 操作系统中的自动化和管理任务。在这篇博客文章中,我们将介绍电子邮件处理任务自动化的实际示例和用例。

在 PowerShell 中加载 API 的 DLL

要在 PowerShell 中使用 Aspose.Email,您需要加载 DLL。假设您已经下载了 DLL,请使用以下命令加载它:

复制代码
Add-Type -Path "path_to_your_Aspose.Email.dll"

将 path_to_your_Aspose.Email.dll 替换为文件的实际路径。

注意:为避免可能出现的路径相关问题,我们建议将 DLL 文件放在与脚本相同的文件夹中。

创建 PowerShell 脚本文件

要创建 PowerShell 脚本文件,请按照以下步骤操作:

  • 打开文本编辑器(如记事本)或代码编辑器(如 Visual Studio Code)。
  • 将 PowerShell 脚本复制到编辑器中。
  • 使用扩展名保存文件.ps1,例如ConvertMsgToEml.ps1。
自动将 MSG 转换为 EML

让我们考虑一个将 MSG 文件转换为 EML 格式的实际示例。假设我们有一大堆 MSG 文件需要快速转换为 EML 文件。此外,我们需要从这些邮件中提取所有附件并单独保存。可以使用 PowerShell 和 Aspose.Email 自动执行此任务。

定义转换函数

首先,打开任何文本编辑器并粘贴以下代码块:

  1. 首先定义函数Convert-MsgToEml并指定两个参数:
    • inputFilePath是输入 .msg 文件路径的字符串参数。
    • outputDirectory是一个字符串参数,表示保存 .eml 文件的目录路径。
  2. 加载 MSG 文件:
    • 使用Load方法将 EML 文件加载到变量 $msg 中。
  3. 保存 MapiMessage 对象:
    • 将MapiMessage 对象作为 .eml 文件保存在指定的输出目录中。
复制代码
function Convert-MsgToEml {
param (
[string]$inputFilePath,
[string]$outputDirectory
)

try {
# Load the MSG file
$msg = [Aspose.Email.Mapi.MapiMessage]::Load($inputFilePath)

# Define the output file path
$outputFilePath = Join-Path -Path $outputDirectory -ChildPath ([System.IO.Path]::GetFileNameWithoutExtension($inputFilePath) + ".eml")

# Save as EML
$msg.Save($outputFilePath, [Aspose.Email.SaveOptions]::DefaultEml)

Write-Host "Converted $inputFilePath to $outputFilePath"

} catch {
Write-Host "Error converting $inputFilePath"
}
}
转换多个文件

接下来,我们可以使用此函数转换目录内的多个 MSG 文件:

  1. 通过定义包含 MSG 文件的目录inputDirectory和将保存转换后的 EML 文件的目录来设置输入和输出目录emlDirectory。
  2. 从输入目录中检索所有 MSG 文件。
  3. 循环遍历输入目录中的每个 MSG 文件并将其转换为 EML 格式,将输出保存在指定的目录中。
复制代码
# Load Aspose.Email DLL
Add-Type -Path ".\Aspose.Email.dll"

# Define the input and output directories
$inputDirectory = "path_to_your_input_directory"
$emlDirectory = "path_to_your_output_directory"

# Get all MSG files in the input directory
$msgFiles = Get-ChildItem -Path $inputDirectory -Filter "*.msg"

foreach ($msgFile in $msgFiles) {
# Convert each MSG file to EML
Convert-MsgToEml -inputFilePath $msgFile.FullName -outputDirectory $emlDirectory
}

用实际路径替换path_to_your_input_directory和。path_to_your_output_directory

从 EML 文件中提取并保存附件

除了将 MSG 文件转换为 EML 文件外,我们还需要从生成的 EML 文件中提取并保存附件。以下是使用 .NET API 和 PowerShell 实现此操作的方法。

定义附件提取函数

定义一个 PowerShell 函数,用于处理从单个 EML 文件中提取和保存附件:

  1. 首先定义函数 Extract-AttachmentsFromEml 并指定两个参数:
    • emlFilePath- 需要从中提取附件的 EML 文件的路径。
    • attachmentsDirectory- 提取的附件的保存目录。
  2. 加载EML文件:
    • 使用Load方法将 EML 文件加载到变量 $eml 中。
  3. 提取附件:
    • 使用 foreach 循环遍历附件集合中的每个附件。
    • 使用Save方法保存附件。
复制代码
function Extract-AttachmentsFromEml {
param (
[string]$emlFilePath,
[string]$attachmentsDirectory
)

try {
# Load the EML file
$eml = [Aspose.Email.MailMessage]::Load($emlFilePath)

# Extract attachments
foreach ($attachment in $eml.Attachments) {
$attachmentFilePath = Join-Path -Path $attachmentsDirectory -ChildPath $attachment.Name
$attachment.Save($attachmentFilePath)
Write-Host "Saved attachment $attachmentFilePath"
}
} catch {
Write-Host "Error extracting attachments from $emlFilePath"
}
}

让我们将其添加到我们的脚本中,在Convert-MsgToEml函数声明之后。

从多个 EML 文件中提取附件

接下来,我们可以使用此函数从目录中的多个 EML 文件中提取附件。将此代码插入脚本末尾。该代码包含以下步骤:

  • 指定要保存提取的附件的附件目录的路径。
  • 用于Get-ChildItem从指定目录中检索所有 EML 文件。此命令将仅过滤掉扩展名为 .eml 的文件。
  • 使用 foreach 循环遍历每个 EML 文件。
  • 对于每个文件,调用Extract-AttachmentsFromEml函数来提取并保存附件。
复制代码
$attachmentsDirectory = "path_to_your_attachments_directory"

# Get all EML files in the directory
$emlFiles = Get-ChildItem -Path $emlDirectory -Filter "*.eml"

foreach ($emlFile in $emlFiles) {
# Extract attachments from each EML file
Extract-AttachmentsFromEml -emlFilePath $emlFile.FullName -attachmentsDirectory $attachmentsDirectory
}

path_to_your_attachments_directory用实际路径替换。

运行 PowerShell 脚本

要运行 PowerShell 脚本,请按照以下步骤操作:

  1. 打开 PowerShell。

  2. 使用命令导航到脚本所在的目录cd。例如:cd path_to_your_script_directory

  3. 通过键入脚本名称来运行该脚本.\。例如:.\ConvertMsgToEml.ps1

    如果遇到执行策略错误,则可能需要调整 PowerShell 执行策略。您可以使用以下命令将策略设置为允许脚本执行:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

    如果出现提示,请确认更改。此设置允许您运行在本地计算机上编写的脚本或由受信任的发布者签名的脚本。

结论

通过使用 Aspose.Email 和 PowerShell,您可以自动将 MSG 文件转换为 EML 格式,并高效地从 EML 文件中提取附件。本文概述的步骤提供了一种简单的方法来设置环境、创建转换脚本、运行它以及提取附件。使用这些工具,您可以简化电子邮件文件管理流程,确保兼容性和易访问性。使用 PowerShell 和 Aspose.Email 自动执行文件转换和附件提取不仅可以节省时间,还可以确保工作流程的一致性和可靠性。无论您是处理几封电子邮件还是管理大型档案,这些技术都将提高您的工作效率并简化您的任务。

相关推荐
九鼎科技-Leo3 小时前
了解 .NET 运行时与 .NET 框架:基础概念与相互关系
windows·c#·.net
九鼎科技-Leo5 小时前
什么是 ASP.NET Core?与 ASP.NET MVC 有什么区别?
windows·后端·c#·asp.net·mvc·.net
.net开发5 小时前
WPF怎么通过RestSharp向后端发请求
前端·c#·.net·wpf
九鼎科技-Leo9 小时前
在 C# 中,ICollection 和 IList 接口有什么区别?
windows·c#·.net
时光追逐者10 小时前
C#/.NET/.NET Core学习路线集合,学习不迷路!
开发语言·学习·c#·asp.net·.net·.netcore·微软技术
Crazy Struggle13 小时前
.NET 全功能流媒体管理控制接口平台
.net·开源项目·流媒体
.net开发13 小时前
WPF使用prism框架发布订阅实现消息提示
c#·.net·wpf
慧都小妮子17 小时前
FastReport将停止 .NET Framework 上的 WebReport 更新
.net·报表控件·fastreport
九鼎科技-Leo1 天前
在 C# 中,如何实现观察者模式?
观察者模式·c#·.net