Controlling how Exchange Online Creates Calendar Events from Email

Smart Processing of Inbound Email

The ability to create calendar events from inbound email has existed in Exchange Online was first announced in late 2015 and has been available since mid-2016. Support articles say Outlook creates these events, but it’s really done on the server. The confusion is possibly because OWA is the only client to reveal the options for users to control how these events are created.

Creating events from email is useful feature. In the past, I used to laboriously extract details of flights from email sent by airlines to insert into my calendar. Now I let Exchange do the work.

New OWA, New Controls

The new OWA became the default web client in July 2019. Since then, Microsoft has increased the feature set available in OWA and recently added new controls over the creation of events from email (Microsoft 365 roadmap item 53580). The new controls give users more choice about what happens when Exchange detects an event in email and are now showing up in Targeted Release tenants.

Detecting Events

As it processes inbound email, a background Exchange agent scans messages to figure out if the messages relate to events generated by airlines, hotels, booking agencies, and other sources.

If an event is detected, user settings control how Exchange processes the event. The settings to control automatic event detection are found in the Calendar section of OWA Options (Figure 1). Go to Events from email to select how Exchange should process each of the event types (Bills (invoices), Package delivery, Service reservations, Flights, Dining, Hotel, Rental car, and Events (concerts and similar)).

Events from email settings in OWA options
Figure 1: Events from email settings in OWA options

In terms of processing events, you can choose:

  • Don’t show event summaries in email or calendar: This choice stops processing these events.
  • Only show event summaries in email: Exchange delivers event information in email but won’t create a calendar event.
  • Show event summaries in email and calendar: Exchange delivers event information in email and uses that information to create a calendar event based on the information in the email, such as the time and date for a flight together with the airline booking reference, the name of the departure and destination airports. Details of the extracted event are added to the message.

Note the setting to control if posted events are private or public. In the past, events from email were posted as private. This didn’t bother the owner of the calendar, but it affected the ability of mailbox delegates to see details of an event. In most cases, it’s best to let Exchange post non-private events.

Posting Events in the Calendar

Figure 2 shows a message received from Expedia to confirm flight reservations for a trip I’m taking to Oslo to speak at the Experts Live Norway event in May. The agent has extracted the flight details from the Expedia message.

Event information detected in an inbound email
Figure 2: Event information detected in an inbound email

Because this message contained details of three flights, the agent split them into separate calendar events.

OWA shares a common code base with the consumer client, so it applies some formatting to make the event look nice when it displays the event posted to the calendar (Figure 3). Outlook desktop is more restrained and shows the essential information. Outlook mobile includes a map to the airport.

OWA displays details of a flight from the calendar event
Figure 3: OWA displays details of a flight from the calendar event

PowerShell Control over Event Settings

Updated May 21: The *-TxpUserSettings cmdlets have been replaced by the *-EventsFromEmailConfiguration cmdlets. The new names more accurately reflect what the cmdlets do.

Event settings can be manipulated with PowerShell by running the new Set-EventsFromEmailConfiguration cmdlet (this used to be done with the Set-MailboxCalendarConfiguration cmdlet). For example, to set Rental car event processing to Email only while making sure that Flight reservations are created in the calendar, run:

Set-EventsFromEmailConfiguration -Identity -FlightReservationProcessingLevel Calendar – RentalCarReservationProcessingLevel Email

Unlike other Exchange Online cmdlets, you must identify the target mailbox by passing one of the SMTP addresses assigned to the mailbox. You cannot pass an alias, display name, distinguished name, or user principal name. This means that regular pipeline processing is not possible. For instance, you can’t do this to have flight reservations created as calendar events:

Get-Mailbox -RecipientTypeDetails UserMailbox | Set-EventsFromEmailConfiguration -FlightReservationProcessingLevel Calendar

Instead, you can do this:

$Mbx = (Get-Mailbox -RecipientTypeDetails UserMailbox)
$Mbx.ForEach( { Set-EventsFromEmailConfiguration -FlightReservationProcessingLevel Calendar -Identity $_.PrimarySmtpAddress } )

To disable a setting for an event, set it to Disabled. For instance, here’s how to disable event creation for all events.

Set-EventsFromEmailConfiguration -Identity -FlightReservationProcessingLevel Disabled -FoodEstablishmentReservationProcessingLevel Disabled -ServiceReservationProcessingLevel Disabled -EventReservationProcessingLevel Disabled -LodgingReservationProcessingLevel Disabled -ParcelDeliveryProcessingLevel Disabled -RentalCarReservationProcessingLevel Disabled -InvoiceProcessingLevel Disabled

As you can see, you must disable each event type separately.

To check the current event processing settings for a mailbox, run the Get-EventsFromEmailConfiguration cmdlet:

Get-EventsFromEmailConfiguration -Identity

DisableReason                    : None
CreateEventsFromEmailAsPrivate   : False
EntityTypeProcessorLevelSettings : {Invoice, RentalCarReservation, EventReservation, FoodEstablishmentReservation...}
Identity                         :
IsValid                          : True
ObjectState                      : New

This reveals the option to create events as private entries in the calendar (off by default) but doesn’t tell us what each of the event type settings are. We find out with:

Get-EventsFromEmailConfiguration -Identity | Select -ExpandProperty EntityTypeProcessorLevelSettings

Name                           Value
----                           -----
Invoice                        Disabled
RentalCarReservation           Disabled
EventReservation               Disabled
FoodEstablishmentReservation   Disabled
FlightReservation              Disabled
ServiceReservation             Disabled
LodgingReservation             Disabled
ParcelDelivery                 Disabled

You can reset to default values (all events set to email with no automatic calendar events created) by running Set-EventsFromEmailConfiguration -ResetSettings:

Set-EventsFromEmailConfiguration -Identity -ResetSettings

Organizations Sending Events

Before Exchange can process an email to extract event information, Microsoft must recognize the sending organization (like an airline). The full list of recognized senders is available online and contains most major airlines. As Microsoft notes, this list is continually updated, probably as organizations realize the value of having their email create events in user calendars.

Tracking down the finer details of what happens with an Office 365 feature is what we obsess over. It’s why the information in the always updated Office 365 for IT Pros Book is worth reading. Or just having as a reference.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.