借助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 自动执行文件转换和附件提取不仅可以节省时间,还可以确保工作流程的一致性和可靠性。无论您是处理几封电子邮件还是管理大型档案,这些技术都将提高您的工作效率并简化您的任务。

相关推荐
九鼎科技-Leo2 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
dot.Net安全矩阵7 小时前
.NET 通过模块和驱动收集本地EDR的工具
windows·安全·web安全·.net·交互
zls3653657 小时前
.NET开源实时应用监控系统:WatchDog
.net
djk88887 小时前
.net将List<实体1>的数据转到List<实体2>
数据结构·list·.net
Crazy Struggle13 小时前
功能齐全的 WPF 自定义控件资源库(收藏版)
.net·wpf·ui控件库
时光追逐者14 小时前
.NET 9 中 LINQ 新增功能实操
开发语言·开源·c#·.net·.netcore·linq·微软技术
zls36536517 小时前
.NET高效下载word文件
开发语言·c#·word·.net
CoderJia程序员甲17 小时前
重学SpringBoot3-如何发送 Email
java·spring boot·后端·email
八荒我为王18 小时前
c#编码技巧(十九):各种集合特点汇总
c#·.net
桑榆肖物20 小时前
将 .NET Aspire 添加到现有应用:前端 JavaScript 项目处理
前端·javascript·.net