I have decided to answer this myself as the links that came up once the page was made actually supplied far better links then the ones I found manually searching stackoverflow. Obviously my search skills leave something to be desired...
The first and second answer on the first link were very useful:
Do all email providers ignore periods in front of @?
Should I remove all dots before the @ sign in emails
I think the option I am going for is as follows:
I will have 2 email fields in the database. One with normalised email, and one with the email as it was presented. (The normalisation will only remove the dots for gmail addresses.)
I will then search for the normalised addresses first when a user is logging in, and only if there are multiple matches will I try to figure out which is which by referring to the original.
I have gone for this as I want to allow people to mess up the capitalisation when logging in, and case sensitivity of the local part of an email address seems to be very rare these days.
If I have missed something please let me know!
EDIT:
Furthermore, for those using node, this module is way more configurable than the other ones I found:
https://www.npmjs.com/package/validator
So for my purposes the following was all I needed for normalisation (still makes gmail lower and removes dots by default, but not for others))
validation.normalizeEmail(email ,{
all_lowercase: false
});