How private are private items in Exchange
-
Twan van Beers
-
09 August, 2015
We sometimes get asked how private are private items?
The short answer is not very… private items is an Outlook and OWA concept and NOT an Exchange concept. Exchange has no item level security model, only mailbox and folder level.
So what does this mean?
This means that unless you can force people to only access your mailbox via Outlook and OWA, then do NOT delegate your mailbox/folders if you expect private items to be 100% private. Other methods like WebDAV, EWS, ActiveSync and any myriad of other mail access methods will NOT honour private items. Instead they will be downloaded just like any other message.
Oh no! So what else can you do?
Using encryption like S/MIME or AD RMS will prevent others from reading your mail, as long as they don’t have the private key to your certificate in the case of S/MIME, and as long as they can’t hijack your email address in the case of AD RMS (and the correct RMS template was used to prevent others from reading)
The proof…
Right so we’ve created two users TwanBoss and TwanDelegate.
TwanBoss delegates his mailbox to TwanDelegate
TwanBoss then creates some private items, I’ve used calendar item and task, but it doesn’t really matter what the item type is.
Now in Outlook all is well, TwanDelegate sees the calendar item marked as ‘Private Appointment’ but cannot open it. Also with MFCMapi or OutlookSpy you can’t see any protected content. However some simple PowerShell scripting (and using only the Delegate’s credentials) we get the whole appointment…
PS C:\Users\Twan> $MailboxName = "TwanBoss@nbcmt.neroblanco.co.uk" PS C:\Users\Twan> $StartDate = new-object System.DateTime(2015, 08, 10) PS C:\Users\Twan> $EndDate = new-object System.DateTime(2015, 08, 13) PS C:\Users\Twan> PS C:\Users\Twan> $dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll" PS C:\Users\Twan> [void][Reflection.Assembly]::LoadFile($dllpath) PS C:\Users\Twan> $service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServi ces.Data.ExchangeVersion]::Exchange2007_SP1) PS C:\Users\Twan> PS C:\Users\Twan> $service.credentials = New-Object System.Net.NetworkCredential( "TwanDelegate@nbcmt.neroblanco.co.uk", "*********" ) PS C:\Users\Twan> PS C:\Users\Twan> PS C:\Users\Twan> $service.AutodiscoverUrl($MailboxName) PS C:\Users\Twan> PS C:\Users\Twan> $folderid = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.D ata.WellKnownFolderName]::Calendar,$MailboxName) PS C:\Users\Twan> $CalendarFolder = [Microsoft.Exchange.WebServices.Data.CalendarFolder]::Bind($service,$folderid) PS C:\Users\Twan> $cvCalendarview = new-object Microsoft.Exchange.WebServices.Data.CalendarView($StartDate,$EndDate,2000 ) PS C:\Users\Twan> $cvCalendarview.PropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Ex change.WebServices.Data.BasePropertySet]::FirstClassProperties) PS C:\Users\Twan> $frCalendarResult = $CalendarFolder.FindAppointments($cvCalendarview) PS C:\Users\Twan> PS C:\Users\Twan> foreach ($apApointment in $frCalendarResult.Items){ >> $psPropset = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.Bas ePropertySet]::FirstClassProperties) >> $apApointment.load($psPropset) >> $apApointment | fl >> } >> Start : 10/08/2015 08:00:00 End : 10/08/2015 08:30:00 OriginalStart : IsAllDayEvent : False LegacyFreeBusyStatus : Busy Location : When : IsMeeting : False IsCancelled : False IsRecurring : False MeetingRequestWasSent : False IsResponseRequested : True AppointmentType : Single MyResponseType : Unknown Organizer : TwanBoss <SMTP:TwanBoss@NBCMT.neroblanco.co.uk> RequiredAttendees : {TwanBoss} OptionalAttendees : {} Resources : {} ConflictingMeetingCount : AdjacentMeetingCount : ConflictingMeetings : AdjacentMeetings : Duration : 00:30:00 TimeZone : (UTC) Dublin, Edinburgh, Lisbon, London AppointmentReplyTime : AppointmentSequenceNumber : 0 AppointmentState : 0 Recurrence : FirstOccurrence : LastOccurrence : ModifiedOccurrences : DeletedOccurrences : StartTimeZone : EndTimeZone : ConferenceType : 0 AllowNewTimeProposal : True IsOnlineMeeting : MeetingWorkspaceUrl : NetShowUrl : ICalUid : 040000008200E00074C5B7101A82E00800000000300798244DD3D001000000000000000010000000EFB2C00E 742D0F428B8E3CD4742A0969 ICalRecurrenceId : ICalDateTimeStamp : 10/08/2015 10:04:50 EnhancedLocation : JoinOnlineMeetingUrl : OnlineMeetingSettings : IsAttachment : False IsNew : False Id : AQMkADViY2UxMDc2LWNmZTUtNDg1OS1hYjU0LWQyMGRlZGQAMTBmOWMARgAAAycY3EhvWmBNvsnINJSFUBwHAFug dGnAXllKhQSVSg8yw7QAAAIBDQAAAFugdGnAXllKhQSVSg8yw7QAAAINOAAAAA== MimeContent : ParentFolderId : AQMkADViY2UxMDc2LWNmZTUtNDg1OS1hYjU0LWQyMGRlZGQAMTBmOWMALgAAAycY3EhvWmBNvsnINJSFUBwBAFug dGnAXllKhQSVSg8yw7QAAAIBDQAAAA== Sensitivity : Private Attachments : {} DateTimeReceived : 10/08/2015 09:15:47 Size : 7316 Categories : {} Culture : en-GB Importance : Normal InReplyTo : IsSubmitted : False IsAssociated : IsDraft : False IsFromMe : False IsResend : False IsUnmodified : False InternetMessageHeaders : DateTimeSent : 10/08/2015 09:15:47 DateTimeCreated : 10/08/2015 09:15:56 AllowedResponseActions : Forward ReminderDueBy : 10/08/2015 08:00:00 IsReminderSet : False ReminderMinutesBeforeStart : 15 DisplayCc : DisplayTo : TwanBoss HasAttachments : False Body : <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="Generator" content="Microsoft Exchange Server"> <!-- converted from rtf --> <style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style> </head> <body> <font face="Calibri" size="2"><span style="font-size:11pt;"> <div>This is my private appointment</div> <div> </div> </span></font> </body> </html> ItemClass : IPM.Appointment Subject : Boss Private Appointment WebClientReadFormQueryString : WebClientEditFormQueryString : ExtendedProperties : {} EffectiveRights : Read LastModifiedName : TwanBoss LastModifiedTime : 10/08/2015 10:04:50 ConversationId : UniqueBody : StoreEntryId : InstanceKey : Flag : NormalizedBody : EntityExtractionResult : PolicyTag : ArchiveTag : RetentionDate : Preview : TextBody : IconIndex : Schema : {MimeContent, Id, ParentFolderId, ItemClass...} Service : Microsoft.Exchange.WebServices.Data.ExchangeService IsDirty : False PS C:\Users\Twan>
Twan van Beers
Twan is a senior consultant with over 30 years of experience. He has a wide range of skills including Messaging, Active Directory, SQL, Networking and Firewalls. Twan loves to write scripts and get deep and dirty into debugging code, in order to understand and resolve the most complex of problems.
News & Insights
Trusted insights on technology and innovation to power your business growth.
-
03/06/2026
A practical engineering guide to owners, assignment, consent, credentials and ...
Read More
-
19/05/2026
Domain migrations in Microsoft 365 are rarely as simple as shifting email ...
Read More
-
12/05/2026
Over the past 10 to 15 years, Microsoft 365 has fundamentally reshaped how ...
Read More
-
07/05/2026
Yesterday we had an all company meeting and I thought it would be cool to kick ...
Read More
-
07/05/2026
Planning a tenant-to-tenant migration? Talk to us
Read More
-
31/03/2026
In tenant-to-tenant (T2T) and Google-to-Microsoft 365 migration projects, ...
Read More
-
27/03/2026
You’d think this would be easy and not an uncommon request. There are genuine ...
Read More
-
23/03/2026
Managing Google to Microsoft Migration with GAM7 and PowerShell
Read More
-
16/03/2026
When a user leaves an organisation in Microsoft 365, administrators have ...
Read MoreSubscribe to our newsletter for the latest updates and insights.
Like what you see? Stay in touch! Subscribers to our email list are among the first to receive the latest news, views and updates from Nero Blanco


