2009-09-21 19 views
12

Estoy creando un script de PowerShell para automatizar un proceso en funcionamiento. Este proceso requiere que se complete un correo electrónico y se envíe a otra persona. El correo electrónico siempre seguirá más o menos el mismo tipo de plantilla, sin embargo, probablemente nunca vuelva a ser igual, así que quiero crear un borrador de correo electrónico en Outlook y abrir la ventana de correo electrónico para que se puedan completar los detalles antes de enviarlos.Crear borrador de correo electrónico de Outlook con PowerShell

He hecho un poco de búsqueda en línea, pero todo lo que puedo encontrar es algún código para enviar un correo electrónico en silencio. El código es el siguiente:

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

En pocas palabras, ¿alguien tiene alguna idea de cómo crear y guardar un nuevo proyecto de correo electrónico Outlook y abrir de inmediato que el proyecto para la edición?

+0

¿Algún guión de muestra del código fuente final? – Kiquenet

Respuesta

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

¡Genial! Gracias. ¡Eso es sobre todo hecho! ¿Es posible hacer que el script abra automáticamente la ventana de borrador para que se puedan completar los últimos bits manuales antes de enviarlos? – Jason

+0

+1 Para obtener el borrador creado y guardado, todo lo que necesita ahora es mostrarlo ... –

+0

np :) llamar al método de visualización: $ draft.Display() –

5

Creo que la respuesta de Shay Levy casi está allí: lo único que falta es la visualización del artículo. Para ello, todo lo que necesita es conseguir que el inspector de objetos relevantes y dilo a manifestarse, por lo tanto:

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

Consulte la Ayuda MSDN en GetInspector para un comportamiento más elegante.

+0

¡¡¡Genial !!! La parte final! ¡Gracias por tu ayuda! – Jason

19

Sobre la base de las otras respuestas, que han recortado el código un poco y utilizar

$ol = New-Object -comObject Outlook.Application 

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

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

Esto elimina el paso innecesario de recuperar el correo de la carpeta de borradores. Por cierto, también elimina un error que ocurrió en el código de Shay Levy cuando dos borradores de correos electrónicos tenían el mismo tema.

1

Pensé que podría agregar algo más a esto. Hay algunos pasos que puede guardar si conoce muchos de los conceptos básicos (sujeto, destinatarios u otros aspectos). Primero crea la plantilla del correo electrónico y guárdalo, p. en algún lugar tal vez con el código?

En cuanto al código en sí, sigue más o menos lo mismo que otros han publicado.

Préstamos de Jason:

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

Modificar según sea necesario. Añada campos o modifique el cuerpo. El mensaje todavía se puede ver antes de enviarlo de la misma manera $msg.GetInspector.Display(). ¡Entonces llame al $msg.send() para enviar!

Cuestiones relacionadas