Thursday, May 08, 2014

GPX Route Mail App for Exchange 2013 and Exchange Online

As part of my MEC talk last month I presented a Mail App that would show a Map with route layer added based on the content of a GPX attachment on a received message. For example here's a screenshot of the Application that was activated from a GPX file that was exported from the Google Tracks application .

Mail Apps are a new feature of Exchange2013/Exchange Online that gives you a standard way of extending the functionality of Outlook,OWA and OWA for devices. The way this particular Mail app works is first, in the Manifest file there is a filter so it will only show on messages you open/view that have an attachment eg

  1. <Rule xsi:type="RuleCollection" Mode="And">  
  2.     <Rule xsi:type="ItemIs" FormType = "Read" ItemType="Message" />  
  3.     <Rule xsi:type="ItemHasAttachment" />  
  4. </Rule>  

Next if somebody activates the application the next thing it does is uses the new Attachments API that was added in 2013 SP1 to first get the details of the attachments on the message, it then checks if one of them is a GPX attachment. If there is a GPX attachment it then uses an externally hosted controller to make the GetAttachment Call to EWS using a token obtained for authentication to get the Attachment content which is then returned to the MailApp (this is done using a modified version of the following sample). Once the Mail App has the GPX content from the attachment it then uses leaflet which is a open source javascript library that makes mapping easier and also a GPX plugin that was developed for leaflet to add a GPX layer to the map.

Note in this sample I'm using  openstreetmap if you going to use this in your own environment or develop a similar solution using this code you need to be aware of the tile usage policy of this or any mapping service you decide to use.

To use a Mail App you need to host all the associated the files yourself somewhere see for more details. With this particular application you need to host both the Mail App and also the controller service to allow you to get the attachment content.  I've put a download of the hosted code for the Mail App here the attachment service uses a modified version of I've included a copy of the modified controller in the download.