Создание черновика электронной почты Outlook с помощью PowerShell - PullRequest
15 голосов
/ 21 сентября 2009

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

Я провел небольшой поиск в Интернете, но все, что я могу найти, - это какой-то код, чтобы отправлять электронную почту без уведомления. Код выглядит следующим образом:

$ol = New-Object -comObject Outlook.Application  
$mail = $ol.CreateItem(0)  
$Mail.Recipients.Add("XXX@YYY.ZZZ")  
$Mail.Subject = "PS1 Script TestMail"  
$Mail.Body = "  
Test Mail  
"  
$Mail.Send() 

Одним словом, кто-нибудь знает, как создать и сохранить новый черновик электронной почты Outlook и сразу же открыть этот черновик для редактирования?

Ответы [ 5 ]

23 голосов
/ 21 сентября 2009
$olFolderDrafts = 16
$ol = New-Object -comObject Outlook.Application 
$ns = $ol.GetNameSpace("MAPI")

# call the save method yo dave the email in the drafts folder
$mail = $ol.CreateItem(0)
$null = $Mail.Recipients.Add("XXX@YYY.ZZZ")  
$Mail.Subject = "PS1 Script TestMail"  
$Mail.Body = "  Test Mail  "
$Mail.save()

# get it back from drafts and update the body
$drafts = $ns.GetDefaultFolder($olFolderDrafts)
$draft = $drafts.Items | where {$_.subject -eq 'PS1 Script TestMail'}
$draft.body += "`n foo bar"
$draft.save()

# send the message
#$draft.Send()
22 голосов
/ 22 сентября 2009

Основываясь на других ответах, я немного урезал код и использую

$ol = New-Object -comObject Outlook.Application

$mail = $ol.CreateItem(0)
$mail.Subject = "<subject>"
$mail.Body = "<body>"
$mail.save()

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

Это удаляет ненужный шаг получения почты из папки черновиков. Кстати, он также удаляет ошибку, которая произошла в коде Шей Леви, когда два черновика писем имели одинаковую тему.

5 голосов
/ 22 сентября 2009

Я думаю, что ответ Шей Леви почти там: единственное, чего не хватает, это отображение предмета. Для этого все, что вам нужно, - это получить соответствующий объект инспектора и указать ему отображать себя, таким образом:

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

См. Справку MSDN по GetInspector для более изящного поведения.

1 голос
/ 14 сентября 2017

Думаю, я бы тоже добавил к этому. Есть несколько шагов, которые вы можете сохранить сами, если знаете много основ (предмет, получатели или другие аспекты). Сначала создайте шаблон письма и сохраните его, например, где-то может быть с кодом?

Что касается самого кода, он следует почти так же, как и другие.

Заимствование у Джейсона:

$ol = New-Object -comObject Outlook.Application
$msg = $ol.CreateItemFromTemplate(<<Path to template file>>)

Изменить при необходимости. Добавить поля или изменить тело. Сообщение можно просмотреть до отправки тем же способом $msg.GetInspector.Display(). Затем позвоните $msg.send() чтобы отправить!

0 голосов
/ 01 октября 2018

Если вы хотите использовать шаблон HTML, используйте HTMLbody вместо Body, пожалуйста, найдите пример кода ниже:

$ol = New-Object -comObject Outlook.Application
$mail = $ol.CreateItem(0)
$mail.Subject = "Top demand apps-SOURCE CLARIFICATION"
$mail.HTMLBody="<html><head></head><body><b>Joseph</b></body></Html>"
$mail.save()

$inspector = $mail.GetInspector
$inspector.Display()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...