Microsoft has a tool called the "Microsoft Transporter Suite" which will convert Lotus Notes and IMAP/POP email boxes to exchange Link to download
But at least for me this seemed to have issues with permisions
Problems: The GUI runs sucessfully, but no emails are imported It turns out that the GUI doesn't show warnings and errors, in my case I got an error on every email and so nothing got imported
Luckily(?) the GUI is just an interface to an underlying powershell set of APIs - if you start the "Transporter management console" you can manually trigger the same transfer via a command line of the form
move-imapmailboxtoexchange -sourceidentity firstname.lastname@example.org -sourceloginid user -sourcepassword password -sourceserver sourceServer -targetidentity email@example.com
This shows the underlying problem, the script for some reason is unable to connect to the exchange server - seemingly whatever you pass via parameters has no effect
It spews errors of the form "Property not set. TargetServer"
Warning: An item has failed property validation and will be ignored. IdentifierName:xxxxxxx Error details:Required property is empty. Property:TargetServer.. Warning: An item has failed property validation and will be ignored. IdentifierName:yyyyyyyy Error details:Required property is empty. Property:TargetServer..
This command however supports -debug and -verbose flags. Running with these shows an attempt to connect to a local web service called "autodiscover" via HTTPS and getting a 401 (permissions) error. It seems to use this to validate the exchange mailbox and looks like it also uses the web interface to transfer the email messages into exchange.
But strangely connecting via wget on a UNIX box to exactly the same web service with the same credentials works correctly (with a multi hop authentication protocol). So either we aren't supplying the right credentials (which looked plausible as there seem to be parameters to supply them) or the code simply doesn't support the permissions protocol (which seemed unlikely)
The later case turns out to be the cause, the code seems to expect local web access to "just work" without any additional credentials being needed.
To prove this case run
test-outlookwebservices -id user
If this gives errors, then you have the same problem I had and a registry hack seems to fix it. It seems that the loopback permissions are controlled by a registry entry
With that fix the test-outlookwebservice starts to work and move-imapmailboxtoexchange then works