Экспорт или печать писем Outlook в PDF

Я использую PowerShell для перебора назначенных папок в Outlook и сохранения вложений в древовидной структуре. Это творит чудеса, но теперь руководство запросило, чтобы само письмо было сохранено в формате PDF. Я нашел PrintOut метод в объекте, но это запрашивает имя файла. Я не смог понять, что передать ему, чтобы он автоматически сохранялся в определенном имени файла. Я посмотрел на страницу MSDN, и это было немного высоко для моего текущего уровень.

Я использую com-объект outlook.приложение.

не хватает сохранения всех писем во временный файл и с помощью стороннего метода есть ли параметры, которые я могу передать для распечатки? Или другой способ добиться этого?

вот база кода для получения электронных писем. Я петлю через $ 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

1 ответов


похоже, что нет встроенных методов, но если вы готовы использовать сторонний двоичный файл,wkhtmltopdf можно использовать.

  1. Get скомпилированные двоичные файлы (используйте MinGW 32-бит для максимальной совместимости).
  2. установить или извлечь установщик с 7Zip и скопировать wkhtmltopdf.exe в папку скрипта. Он не имеет внешних зависимостей и может быть распространен с вашим скриптом, поэтому вам не нужно устанавливать 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
}

обратите внимание, что у меня нет опыта работы с Outlook и используется MSDN для получения соответствующих свойств объекта, поэтому код может потребоваться некоторая настройка.