在不使用 powershell 中的 outlook 的情况下将 msg 转换为 html

convert msg to html without using outlook in powershell

我想在 powershell 中将 msg 文件(在本地文件夹中)转换为 html。我已经通过使用 outlook 完成了此操作,但问题是此脚本将在服务器上运行,因此我无法使用 outlook。 到目前为止,我搜索了这些问题:

我找不到很多使用 Powershell 的方法。但是,在上述问题的帮助下,我下载了 Redemption 并像这样使用它:

$routlook = New-Object -COM Redemption.RDOSession
$routlook.Logon()
$msg = $routlook.GetMessageFromMsgFile("C:\temp\test.msg",$TRUE)
$path = "C:\temp\test.html"
$msg.HTMLBody | Set-Content $path

但是下面的 $msg.HTMLBody 只是 returns 一个空的 html 而 $msg.Body returns 什么都没有:

<HTML>
<HEAD><META http-equiv=Content-Type content="text/html; charset=UTF-8"> 
</HEAD>
<BODY>
<!-- Converted from text/plain format -->
</BODY></HTML>

可能我使用 Redemption 的方式不对,不知道如何解决。或者是否有任何其他 3rd 方解决方案可以在服务器中使用而不是使用 outlook?

感谢您的帮助

调用GetMessageFromMsgFile时第二个参数为true,表示创建的是一个全新的文件。改为传递 false。

另请注意,GetMessageFromMsgFile 不需要活动会话,因此无需调用 RDOSession.Logon。无论如何,如果您 运行 属于服务用户,则不会有个人资料。

要创建 HTML 文件,您不需要阅读 RDOMail.HTMLBody 属性。你可以打电话给RDOMail.SaveAs(..., olHTML).

您需要删除 $TRUE 参数:

$routlook = New-Object -COM Redemption.RDOSession
$routlook.Logon()
$msg = $routlook.GetMessageFromMsgFile("C:\temp\test.msg")
$path = "C:\temp\test.html"
$msg.HTMLBody | Set-Content $path

然后您可以打开您的 msg 文件,然后另存为 html

为了清楚起见,无论是答案还是我的完整代码,它都可以正常工作:

$routlook = New-Object -COM Redemption.RDOSession
$location = "C:\temp\Redemption\"
$msg = $routlook.GetMessageFromMsgFile("C:\temp\test.msg",$FALSE)
$name = "test.html"
$path = $location + $name
$msg.SaveAs($path,5)

或者

$routlook = New-Object -COM Redemption.RDOSession
$location = "C:\temp\Redemption\"
$msg = $routlook.GetMessageFromMsgFile("C:\temp\test.msg")
$name = $_.Name + ".html"
$path = $location + $name
$msg.HTMLBody | Set-Content $path