Powershell открыть черновик электронной почты с подписью

Я пытаюсь сделать кнопку, открывающую черновик Outlook, который мы можем ввести «Кому:» и нажать «Отправить».

Я получил большую часть работы со следующим кодом:

$SUBJECT = ('Ticket: ' + $textticketnumber.text)
CreateLink #Function that gets a weblink and stores it to variable $rtblink.Text
$BODY = $rtblink.Text
$EMAILSIG = Get-Content ($env:USERPROFILE + "\AppData\Roaming\Microsoft\Signatures\*.htm")

$ol = New-Object -comObject Outlook.Application
$mail = $ol.CreateItem(0)
$mail.Subject = "$SUBJECT"
$mail.Body = "`n$BODY`n$EMAILSIG"

$inspector = $mail.GetInspector
$inspector.Display()

Проблема в том, что тело письма имеет необработанный HTML-код, а не правильную подпись. Я могу изменить get-content на *.txt вместо .htm, но тогда в подписи нет форматирования, плюс он ставит все это в одну строку.

Есть ли способ заставить тело кода работать с html или есть другой способ вставить подпись в электронное письмо с правильным форматированием?


person user3585839    schedule 04.06.2014    source источник


Ответы (1)


Следующий код взят из одного из моих скриптов:

$sMsg = Get-Content template.html 

$sRecipientAddr = "[email protected]"
$sMsgSubject = "Subject"

$oOutlook = New-Object -ComObject Outlook.Application 
$oMapiNs = $oOutlook.GetNameSpace("MAPI")
$oMailMsg = $oOutlook.CreateItem(0)
$oMailMsg.GetInspector.Activate()
$sSignature = $oMailMsg.HTMLBody
[Void]$oMailMsg.Recipients.Add($sRecipientAddr)  
$oMailMsg.Subject = $sMsgSubject
$oMailMsg.HTMLBody = $sMsg + $sSignature
$oMailMsg.Save()

Я использую его с Outlook 2007, и он работает. Outlook настроен на автоматическое добавление подписи к новым сообщениям. template.html — это предварительно отформатированное сообщение Outlook, сохраненное в формате HTML.

Идея не моя, но я, честно говоря, не могу вспомнить, где я нашел фрагмент, поэтому заранее извиняюсь перед автором.

person Alexander Obersht    schedule 04.06.2014
comment
Спасибо! Это сработало для получения моей подписи. Единственная проблема заключается в том, что теперь я получаю окно от Outlook, в котором говорится, что программа пытается получить доступ к информации об адресе электронной почты. Если я закомментирую строку: $sSignature = $oMailMsg.HTMLBody, тогда я не получу сообщение. - person user3585839; 04.06.2014
comment
Сотрите это: я вернулся к исходному коду и обновил $mail.body до $mail.HTMLBody, и все заработало нормально. - person user3585839; 04.06.2014
comment
Да, использование .HTMLBody является ключом. - person Alexander Obersht; 04.06.2014