I recently needed to test sending an email via EWS with a bunch of custom X-headers. While I have worked with EWS in PowerShell before I couldn’t find any examples of how to do so but found plenty in Java and .Net. So, after stumbling through trying to recreate what I found in PowerShell I came with up with the following and inserted into this script for sending EWS emails.
In the code below, I’m
- Creating a new property set so I have access to edit all the parts of the new email. I think all the needed property sets must be loaded at the same time. That is you can’t load one set and add another without it overwriting the first property set
- I then save the email since I learned in my testing you can’t add a property to the email without an instance key associated with it, which it doesn’t get until it’s saved.
- Create a internet header object and it’s name
- Load the property set
- Insert the X-Header and its value in the headers of the email
- I then update the saved email (though I don’t think this necessary)
#Tested by using this : https://gallery.technet.microsoft.com/office/Send-e-mail-from-67a714aa #TO view more properties # https://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.emailmessage_members(v=exchg.80).aspx $propertyset = New-Object Microsoft.Exchange.WebServices.Data.PropertySet ( [Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::InternetMessageHeaders, [Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ExtendedProperties, [Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::MimeContent, [Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::Attachments, [Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ToRecipients, [Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::Body, [Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::BccRecipients, [Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::CcRecipients, [Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::From, [Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ReplyTo, [Microsoft.Exchange.WebServices.Data.ItemSchema]::InternetMessageHeaders, [Microsoft.Exchange.WebServices.Data.ItemSchema]::ExtendedProperties ) #You need to save to load more properties (this creates a draft) $message.Save() #Create New Xheader object $XHeader = New-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition([Microsoft.Exchange.WebServices.Data.DefaultExtendedPropertySet]::InternetHeaders,'X-CustomHeader',[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String) $message.load($propertyset) #Set the property $message.SetExtendedProperty($XHeader,"Sent Via EWS") #Update the draft version #https://docs.microsoft.com/en-us/dotnet/api/microsoft.exchange.webservices.data.conflictresolutionmode?view=exchange-ews-api $message.Update('AlwaysOverwrite')