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