Create Outlook email draft using PowerShell

后端 未结 5 1648
清酒与你
清酒与你 2020-12-03 07:43

I\'m creating a PowerShell script to automate a process at work. This process requires an email to be filled in and sent to someone else. The email will always roughly fol

相关标签:
5条回答
  • 2020-12-03 08:25

    Based on the other answers, I have trimmed down the code a bit and use

    $ol = New-Object -comObject Outlook.Application
    
    $mail = $ol.CreateItem(0)
    $mail.Subject = "<subject>"
    $mail.Body = "<body>"
    $mail.save()
    
    $inspector = $mail.GetInspector
    $inspector.Display()
    

    This removes the unnecessary step of retrieving the mail from the drafts folder. Incidentally, it also removes an error that occurred in Shay Levy's code when two draft emails had the same subject.

    0 讨论(0)
  • 2020-12-03 08:27

    Thought I would add in to this as well. There are a few steps you can save yourself if you know a lot of the basics (subject, recipients, or other aspects). First create the template of the email and save that, e.g. somewhere maybe with the code?

    As to the code itself, it follows much the same that others have posted.

    Borrowing from Jason:

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

    Modify as needed. Append fields or modify body. The message can still be viewed prior to sending the same way $msg.GetInspector.Display(). Then call $msg.send() to send away!

    0 讨论(0)
  • 2020-12-03 08:28

    if you want to use HTML template please use HTMLbody instead of Body , please find sample code below:

    $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()
    
    0 讨论(0)
  • 2020-12-03 08:34
    $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()
    
    0 讨论(0)
  • 2020-12-03 08:48

    I think Shay Levy's answer is almost there: the only bit missing is the display of the item. To do this, all you need is to get the relevant inspector object and tell it to display itself, thus:

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

    See the MSDN help on GetInspector for fancier behaviour.

    0 讨论(0)
提交回复
热议问题