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)).
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.
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 Outlook.com 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.
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:
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:
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:
You can reset to default values (all events set to email with no automatic calendar events created) by running Set-EventsFromEmailConfiguration -ResetSettings:
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.
{"id":null,"mode":"button","open_style":"in_modal","currency_code":"EUR","currency_symbol":"\u20ac","currency_type":"decimal","blank_flag_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":100,"top_media_type":"featured_image","featured_image_url":"https:\/\/office365itpros.com\/wp-content\/uploads\/2022\/11\/cover-141x200.jpg","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":true,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Virtual Tip Jar","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"Office 365 for IT Pros","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"Office 365 for IT Pros","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for supporting the work of Office 365 for IT Pros!","payment_confirmation_title":"Office 365 for IT Pros","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":null,"terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}
One Reply to “Controlling how Exchange Online Creates Calendar Events from Email”