将Outlook电子邮件导出或打印为PDF

Unf*_*nut 7 pdf powershell outlook

我使用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
Run Code Online (Sandbox Code Playgroud)

bea*_*ker 5

看起来没有内置方法,但如果您愿意使用第三方二进制文件,可以使用wkhtmltopdf.

  1. 获取预编译二进制文件(使用MinGW 32位以获得最大兼容性).
  2. 使用7Zip安装或解压缩安装程序并复制wkhtmltopdf.exe到脚本目录.它没有外部依赖关系,可以使用您的脚本重新分发,因此您不必在所有PC上安装PDF打印机.
  3. 在脚本中使用对象的HTMLBody属性MailItem进行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
}
Run Code Online (Sandbox Code Playgroud)

请注意,我没有使用Outlook和使用MSDN获取对象的相关属性的经验,因此代码可能需要一些调整.