Export or Print Outlook Emails to PDF
我正在使用PowerShell在Outlook中的指定文件夹中循环,并将附件保存在树状结构中。这行之有效,但现在管理层已要求将电子邮件本身也保存为PDF。我在对象中找到了
我正在使用Outlook.application的com对象。
将所有电子邮件保存到临时文件并使用第三方方法的简短操作是否可以将参数传递给PrintOut?还是另一种方式来实现这一目标?
这是获取电子邮件的代码基础。我遍历$ Emails
1 2 3 4 5 6 7 | $Outlook = New-Object -comobject outlook.application $Connection = $Outlook.GetNamespace("MAPI") #Prompt which folder to process $Folder = $Connection.PickFolder() $Outlook_Folder_Path = ($Folder.FullFolderPath).Split("",4)[3] $BaseFolder += $Outlook_Folder_Path +"" $Emails = $Folder.Items |
好像没有内置方法,但是如果您愿意使用第三方二进制文件,则可以使用wkhtmltopdf。
这里是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # Get path to wkhtmltopdf.exe $ExePath = Join-Path -Path ( Split-Path -Path $Script:MyInvocation.MyCommand.Path ) -ChildPath 'wkhtmltopdf.exe' # Set PDF path $OutFile = Join-Path -Path 'c:\\path\\to\\emails' -ChildPath ($Email.Subject + '.pdf') # Convert HTML string to PDF file $ret = $Email.HTMLBody | & $ExePath @('--quiet', '-', $OutFile) 2>&1 # Check for errors if ($LASTEXITCODE) { Write-Error $ret } |
请注意,我没有使用Outlook的经验,并且使用MSDN来获取对象的相关属性,因此代码可能需要进行一些调整。
发生了同样的问题。如果有人尝试做类似的事情,这就是我要解决的问题。
您可以先获取msg文件并将其转换为doc,然后再将doc文件转换为pdf。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $outlook = New-Object -ComObject Outlook.Application $word = New-Object -ComObject Word.Application Get-ChildItem -Path $folderPath -Filter *.msg? | ForEach-Object { $msgFullName = $_.FullName $docFullName = $msgFullName -replace '\\.msg$', '.doc' $pdfFullName = $msgFullName -replace '\\.msg$', '.pdf' $msg = $outlook.CreateItemFromTemplate($msgFullName) $msg.SaveAs($docFullName, 4) $doc = $word.Documents.Open($docFullName) $doc.SaveAs([ref] $pdfFullName, [ref] 17) $doc.Close() } |
然后,只需清除
之后不需要的文件