【问题标题】:Create Outlook email draft using PowerShell使用 PowerShell 创建 Outlook 电子邮件草稿
【发布时间】:2010-11-30 00:53:15
【问题描述】:

我正在创建一个 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 电子邮件草稿并立即打开该草稿进行编辑?

【问题讨论】:

  • 任何最终的源代码示例脚本?

标签: powershell automation


【解决方案1】:

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

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

    【讨论】:

    • 太棒了!谢谢。大部分都做到了!是否可以让脚本自动打开草稿窗口,以便在发送前填写最后的手动位?
    • np :) 调用显示方法:$draft.Display()
    • 有没有办法在草稿中添加附件?
    【解决方案3】:

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

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

    请参阅 GetInspector 上的 MSDN 帮助,了解更高级的行为。

    【讨论】:

      【解决方案4】:

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

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

      借用杰森:

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

      根据需要进行修改。追加字段或修改正文。在发送之前仍然可以查看消息$msg.GetInspector.Display()。那就拨打$msg.send()送走吧!

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-23
          • 2021-08-19
          相关资源
          最近更新 更多