Pinning email is a new feature that is available in OWA(or Outlook on the Web) on Office365 and Exchange 2016 and a much requested feature in Outlook https://outlook.uservoice.com/forums/322590-outlook-2016-for-windows/suggestions/12963459-pin-or-stick-important-emails-at-the-top-of-your-I
What happens when you pin an Email in OWA is it sets two MAPI properties on the backend when pinned the value will look like the following
the value 1/9/4500 is significant and is used when an Item in Pinned in the UI, When the Item is Unpinned in the UI 0x0F01 reverts back the current time and 0x0F02 is removed from the item. So in EWS if you want to display all the Pinned email you can use a SearchFilter to filter the Item based on the value of this property eg
I've create a PowerShell EWS Module to enumerate the Pin Item in a folder here https://github.com/gscales/Powershell-Scripts/blob/master/PinEmail.ps1
To show Pinned Email in the Inbox you can use
Get-PinnedEmail -MailboxName gscales@datarumble.com -FolderPath \Inbox
To Unpin Email you can use the Set-UnPinEmail function to pass in a EWS Managed API Item type eg
Set-UnPinEmail -Item $item
One real life example where this came in handy was I recently managed to pin over 800 emails in my mailbox through inadvertently enabling a InboxRule using the Pin Email action that procesed every incoming message. When I switched the rule off recently which i didn't think much off a the time I could then nolonger see any new messages arriving in OWA because they where appearing under the pinned email (800 deep in my mailbox no matter how I sorted the email). It didn't register what the problem was a first (as a long term user i just ignored the pin icon)and thought it maybe an OWA bug that would be fixed in the next service update and it embarrassingly took me a few weeks to realise what the actual problem was. Unpinning email one at a time would have taken me a very long time hence this script.
So to unpin all email in the Inbox you can use
Get-PinnedEmail -MailboxName gscales@datarumble.com -FolderPath \Inbox | foreach-object{Set-UnPinEmail -Item $_}
To fill out the function in this module there is also a Set-PinEmail function and an example function that uses this which will Pin the last received email in the Inbox eg
Invoke-PinLastEmail -MailboxName gscales@datarumble.com -FolderPath \Inbox
All the code for this post can be found on GitHub here https://github.com/gscales/Powershell-Scripts/blob/master/PinEmail.ps1
What happens when you pin an Email in OWA is it sets two MAPI properties on the backend when pinned the value will look like the following
the value 1/9/4500 is significant and is used when an Item in Pinned in the UI, When the Item is Unpinned in the UI 0x0F01 reverts back the current time and 0x0F02 is removed from the item. So in EWS if you want to display all the Pinned email you can use a SearchFilter to filter the Item based on the value of this property eg
$PR_RenewTime2 = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0xF02,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::SystemTime);
$SfSearchFilter = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsGreaterThan($PR_RenewTime2, [DateTime]::Parse("4500-9-1"))
To show Pinned Email in the Inbox you can use
Get-PinnedEmail -MailboxName gscales@datarumble.com -FolderPath \Inbox
To Unpin Email you can use the Set-UnPinEmail function to pass in a EWS Managed API Item type eg
Set-UnPinEmail -Item $item
One real life example where this came in handy was I recently managed to pin over 800 emails in my mailbox through inadvertently enabling a InboxRule using the Pin Email action that procesed every incoming message. When I switched the rule off recently which i didn't think much off a the time I could then nolonger see any new messages arriving in OWA because they where appearing under the pinned email (800 deep in my mailbox no matter how I sorted the email). It didn't register what the problem was a first (as a long term user i just ignored the pin icon)and thought it maybe an OWA bug that would be fixed in the next service update and it embarrassingly took me a few weeks to realise what the actual problem was. Unpinning email one at a time would have taken me a very long time hence this script.
So to unpin all email in the Inbox you can use
Get-PinnedEmail -MailboxName gscales@datarumble.com -FolderPath \Inbox | foreach-object{Set-UnPinEmail -Item $_}
To fill out the function in this module there is also a Set-PinEmail function and an example function that uses this which will Pin the last received email in the Inbox eg
Invoke-PinLastEmail -MailboxName gscales@datarumble.com -FolderPath \Inbox
All the code for this post can be found on GitHub here https://github.com/gscales/Powershell-Scripts/blob/master/PinEmail.ps1