使用PowerShell创建Outlook电子邮件草稿

时间:2009-09-21 09:58:50

标签: powershell automation

我正在创建一个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 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:22)

根据其他答案,我稍微修改了代码并使用

$ol = New-Object -comObject Outlook.Application

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

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

这将删除从草稿文件夹中检索邮件的不必要步骤。顺便提一下,当两个草稿电子邮件具有相同主题时,它还会删除Shay Levy代码中发生的错误。

答案 2 :(得分:5)

我认为Shay Levy的答案几乎就在那里:唯一缺少的是项目的显示。 要做到这一点,您只需要获取相关的检查器对象并告诉它自己显示,因此:

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

有关更高级别的行为,请参阅GetInspector上的MSDN帮助。

答案 3 :(得分:1)

我想我也会加入其中。如果您了解很多基础知识(主题,收件人或其他方面),您可以自己保存几个步骤。首先创建电子邮件的模板并保存,例如某个地方可能有代码?

至于代码本身,它跟其他人发布的大致相同。

借鉴杰森:

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

根据需要进行修改。追加字段或修改正文。在以$msg.GetInspector.Display()发送相同方式之前,仍然可以查看该消息。然后致电$msg.send()发送!

答案 4 :(得分:0)

如果要使用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()