2009-09-21 14 views
12

Sto creando uno script PowerShell per automatizzare un processo al lavoro. Questo processo richiede che un'email sia compilata e inviata a qualcun altro. L'e-mail seguirà sempre più o meno lo stesso tipo di modello, ma probabilmente non sarà mai la stessa ogni volta quindi voglio creare una bozza di e-mail in Outlook e aprire la finestra di posta elettronica in modo che i dettagli extra possano essere compilati prima dell'invio.Creazione di bozze di Outlook con PowerShell

Ho fatto un po 'di ricerche online, ma tutto quello che posso trovare è un codice per inviare email in silenzio. Il codice è il seguente:

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

Insomma, qualcuno ha qualche idea di come creare e salvare un nuovo progetto di e-mail di Outlook e aprire subito che il progetto per la modifica?

+0

qualsiasi script di esempio del codice sorgente finale? – Kiquenet

risposta

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

Ottimo! Grazie. Questo è quasi sempre fatto! È possibile fare in modo che lo script apra automaticamente la finestra bozza in modo che gli ultimi bit manuali possano essere compilati prima dell'invio? – Jason

+0

+1 Per ottenere la bozza creata e salvata - tutto ciò che serve ora è visualizzarlo ... –

+0

np :) chiama il metodo di visualizzazione: $ draft.Display() –

5

Penso che la risposta di Shay Levy sia quasi arrivata: l'unica cosa che manca è la visualizzazione dell'articolo. Per fare questo, tutto ciò che serve è quello di ottenere l'oggetto ispettore rilevante e dirgli di visualizzare se stessa, in tal modo:

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

Vedi l'aiuto di MSDN sulla GetInspector per il comportamento più elaborato.

+0

Grande !!! La parte finale! Grazie per l'aiuto! – Jason

19

Sulla base delle altre risposte, ho tagliato verso il basso il codice un po 'e utilizzare

$ol = New-Object -comObject Outlook.Application 

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

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

Ciò elimina la fase inutile di recuperare la posta dalla cartella bozze. Per inciso, rimuove anche un errore che si è verificato nel codice di Shay Levy quando due email di bozza avevano lo stesso soggetto.

1

Ho pensato di aggiungere anche a questo. Ci sono alcuni passaggi che puoi salvare da solo se conosci molte nozioni di base (soggetto, destinatari o altri aspetti). Prima crea il modello dell'e-mail e salvalo, ad es. da qualche parte forse con il codice?

Per quanto riguarda il codice stesso, segue molto lo stesso che altri hanno pubblicato.

Prendendo in prestito da Jason:

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

Modificare come necessario. Aggiungi campi o modifica il corpo. Il messaggio può ancora essere visualizzato prima dell'invio allo stesso modo $msg.GetInspector.Display(). Quindi chiama $msg.send() per inviare via!

Problemi correlati