Создайте проект электронной почты Outlook с помощью PowerShell

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

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

$ol = New-Object -comObject Outlook.Application  
$mail = $ol.CreateItem(0)  
$Mail.Recipients.Add("[email protected]")  
$Mail.Subject = "PS1 Script TestMail"  
$Mail.Body = "  
Test Mail  
"  
$Mail.Send() 

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

Ответ 1

$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("[email protected]")  
$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()

Ответ 2

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

$ol = New-Object -comObject Outlook.Application

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

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

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

Ответ 3

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

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

Обратитесь к справке MSDN на GetInspector для улучшения поведения.

Ответ 4

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

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

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

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

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