在不使用 powershell 中的 outlook 的情况下将 msg 转换为 html
convert msg to html without using outlook in powershell
我想在 powershell 中将 msg 文件(在本地文件夹中)转换为 html。我已经通过使用 outlook 完成了此操作,但问题是此脚本将在服务器上运行,因此我无法使用 outlook。
到目前为止,我搜索了这些问题:
- Save Email as MSG file without using Outlook (COM object, etc.) or 3rd party software
- Read Outlook .msg File
我找不到很多使用 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
我想在 powershell 中将 msg 文件(在本地文件夹中)转换为 html。我已经通过使用 outlook 完成了此操作,但问题是此脚本将在服务器上运行,因此我无法使用 outlook。 到目前为止,我搜索了这些问题:
- Save Email as MSG file without using Outlook (COM object, etc.) or 3rd party software
- Read Outlook .msg File
我找不到很多使用 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