我正在使用 PowerShell 循环浏览 Outlook 中的指定文件夹并将附件保存在树状结构中。这很神奇,但现在管理层要求将电子邮件本身也保存为 PDF。我找到了 PrintOut
对象中的方法,但会提示输入文件名。我一直无法弄清楚要传递给它什么才能让它自动保存到特定的文件名。我查看了 MSDN 页面,它对我目前的水平来说有点高。
我正在使用outlook.application 的com 对象。
除了将所有电子邮件保存到临时文件并使用第三方方法之外,是否有可以传递给 PrintOut 的参数?或者另一种方法来实现这一点?
这是获取电子邮件的代码的基础。我遍历 $Emails
$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可以使用。
wkhtmltopdf.exe
到您的脚本目录。它没有外部依赖项,可以与您的脚本一起重新分发,因此您不必在所有 PC 上安装 PDF 打印机。 MailItem
的属性(property)用于 PDF 转换的脚本中的对象。 下面是一个例子:
# 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 获取对象的相关属性,因此代码可能需要进行一些调整。
关于powershell - 将 Outlook 电子邮件导出或打印为 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43078789/