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

标签 powershell pdf 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

最佳答案

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

  • 获取 precompiled binary (使用 MinGW 32 位以获得最大兼容性)。
  • 使用 7Zip 安装或解压缩安装程序并复制 wkhtmltopdf.exe到您的脚本目录。它没有外部依赖项,可以与您的脚本一起重新分发,因此您不必在所有 PC 上安装 PDF 打印机。
  • 使用 HTMLBody 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/

    相关文章:

    powershell - 测试函数返回值是否为空

    c# - PowerShell WPF 应用程序中的动态数据模板

    javascript - jZebra 小程序测试无需打印机

    java - 出现异常 :javax. mail.AuthenticationFailedException : 550 5. 2.1 无法访问邮箱

    c# - Outlook.MailItem.UserProperty 发送邮件后消失

    powershell - PowerShell在字符串前后放置文本

    powershell - 我想删除所有不以数组中任何元素的值开头的文件

    pdf - 转换 PDF 文档中所有链接的缩放级别

    php - 在 PHP 中处理 PDF

    vba - 如何将操作应用于选定的多个 Outlook 项目?