2009-09-21 33 views
12

Tworzę skrypt PowerShell, aby zautomatyzować proces w pracy. Ten proces wymaga wypełnienia e-maila i wysłania go do kogoś innego. E-mail zawsze będzie mniej więcej zgodny z tym samym szablonem, ale prawdopodobnie nigdy nie będzie taki sam za każdym razem, więc chcę utworzyć wersję roboczą wiadomości e-mail w programie Outlook i otworzyć okno wiadomości e-mail, aby dodatkowe szczegóły mogły zostać wypełnione przed wysłaniem.Utwórz wersję roboczą wiadomości e-mail programu Outlook za pomocą programu PowerShell

Zrobiłem trochę wyszukiwania w Internecie, ale wszystko, co mogę znaleźć, to kod do cichego wysyłania wiadomości e-mail. Kod jest w następujący sposób:

$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() 

Krótko mówiąc, czy ktoś ma jakiś pomysł, jak utworzyć i zapisać nowy projekt e-mail programu Outlook i natychmiast otworzyć ten projekt do edycji?

+0

dowolny przykładowy skrypt kodu źródłowego? – Kiquenet

Odpowiedz

22
$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() 
+0

Świetnie! Dzięki. W większości to zrobiłem! Czy możliwe jest automatyczne otwarcie skryptu w oknie roboczym, aby ostatnie ręczne bity mogły zostać wypełnione przed wysłaniem? – Jason

+0

+1 Aby uzyskać wersję roboczą utworzoną i zapisaną - wystarczy teraz wyświetlić ... –

+0

np :) wywołać metodę wyświetlania: $ draft.Display() –

5

Myślę, że odpowiedź Shay'a Levy jest prawie na miejscu: brakuje tylko wskazania przedmiotu. Aby to zrobić, wystarczy, aby uzyskać odpowiedni obiekt inspektora i poinformować go, aby wyświetlić się w ten sposób:

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

znaleźć w pomocy MSDN na GetInspector dla hodowcy zachowanie.

+0

Świetnie !!! Ostatnia część! Dzięki za pomoc! – Jason

19

podstawie innych odpowiedzi, mam okrojone kod trochę i używać

$ol = New-Object -comObject Outlook.Application 

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

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

Usuwa niepotrzebne etap pobierania poczty z folderu Robocze. Nawiasem mówiąc, usuwa również błąd, który pojawił się w kodzie Shay Levy, gdy dwa e-maile z projektem mają ten sam temat.

1

Myślałem, że dodam do tego również. Jest kilka kroków, które możesz uratować, jeśli znasz wiele podstawowych tematów (temat, odbiorcy lub inne aspekty). Najpierw utwórz szablon wiadomości e-mail i zapisz ją, np. gdzieś może z kodem?

Co do samego kodu, ma on takie samo samo, jak inne opublikowane.

Pożyczanie z Jasonem:

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

Zmienić potrzebne. Dołącz pola lub modyfikuj treść. Wiadomość może być nadal wyświetlana przed wysłaniem w ten sam sposób: $msg.GetInspector.Display(). Następnie zadzwoń $msg.send(), aby odesłać!

Powiązane problemy