Export or Print Outlook Emails to PDF Export or Print Outlook Emails to PDF powershell powershell

Export or Print Outlook Emails to PDF


Looks like there are no built-in methods, but if you're willing to use third-party binary, wkhtmltopdf can be used.

  1. Get precompiled binary (use MinGW 32-bit for maximum compatibility).
  2. Install or extract installer with 7Zip and copy wkhtmltopdf.exe to your script directory. It has no external dependencies and can be redistributed with your script, so you don't have to install PDF printer on all PCs.
  3. Use HTMLBody property of MailItem object in your script for PDF conversion.

Here is an example:

# 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 errorsif ($LASTEXITCODE) {    Write-Error $ret}

Please note, that I've no experience with Outlook and used MSDN to get relevant properties for object, so the code might need some tweaking.


Had this same issue. This is what I did to fix it if anybody else is trying to do something similar.

You could start by taking your msg file and converting it to doc then converting the doc file to pdf.

$outlook = New-Object -ComObject Outlook.Application$word = New-Object -ComObject Word.ApplicationGet-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() }

Then, just clean up the unwanted files after