Searching around the web I couldn’t find any way to to transfer messages from Windows Phone to Android that actually worked.
I could export all the data from Windows Phone using the contacts+message backup app, but there was no Android app that understood that .msg format.
However, I found the SMS Backup & Restore app that seemed to work well for exporting/importing messages between Android devices.
So with a bit of trial and error and the help of the XML Type Provider I managed to create an F# script to convert from one format to another.
The trickier part was trying to figure out what DateTime format was being used in both cases (thanks Lincoln), all the rest was pretty straightforward. The .msg format has a lot less fields than the .xml format used by the Android app, but it ended up still working ok with those missing fields.
It converts both SMS and MMS, though it only retains the text and photos from the MMS’s, vCards, embedded location maps and other items are skipped. but it should be fairly easy to add that support if needed.
Here is the code: