如何使用PowerShell将HTML邮件转换为MSG文件?
使用PowerShell将ZIP中的HTML邮件转换为.msg文件
整体流程
先解压ZIP文件提取HTML内容和可选附件,再通过Outlook的COM组件创建邮件对象、导入HTML正文、添加附件,最后保存为.msg格式。
1. 解压ZIP文件
用PowerShell内置命令即可完成解压,无需额外工具:
# 定义ZIP路径和临时解压目录 $zipPath = "C:\path\to\your\email.zip" $extractPath = "C:\temp\email_extract" # 解压ZIP,若目录已存在则覆盖原有内容 Expand-Archive -Path $zipPath -DestinationPath $extractPath -Force
2. 生成.msg文件
借助Outlook COM对象创建邮件,导入HTML内容并处理附件:
# 初始化Outlook应用实例 $outlook = New-Object -ComObject Outlook.Application # 创建新邮件对象(0对应olMailItem类型) $mailItem = $outlook.CreateItem(0) # 读取HTML文件内容并设置为邮件正文 $htmlFile = Get-ChildItem -Path $extractPath -Filter "*.html" | Select-Object -First 1 if ($htmlFile) { $htmlContent = Get-Content -Path $htmlFile.FullName -Raw $mailItem.HTMLBody = $htmlContent } # 添加目录中的非HTML文件作为附件 $attachments = Get-ChildItem -Path $extractPath | Where-Object { $_.Name -ne $htmlFile.Name } foreach ($att in $attachments) { $mailItem.Attachments.Add($att.FullName) } # 保存为.msg格式(3对应olMSG枚举值) $savePath = "C:\path\to\output\email.msg" $mailItem.SaveAs($savePath, 3) # 释放COM对象,避免内存泄漏 [System.Runtime.Interopservices.Marshal]::ReleaseComObject($mailItem) | Out-Null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlook) | Out-Null Remove-Variable outlook, mailItem
注意事项
- 需确保本地安装了Microsoft Outlook,且PowerShell有足够权限访问Outlook组件
- 若运行时弹出Outlook安全提示,可在Outlook设置的「信任中心」调整程序访问权限
- 临时解压目录可自行指定,处理完成后可通过
Remove-Item -Path $extractPath -Recurse -Force清理
内容的提问来源于stack exchange,提问作者Simon Ferndriger
相关产品推荐
相关产品推荐

