It all depends on which interfaces you want to support. In my case, we implemented login by email for a custom Share-based UI. This involved a custom login page, a facade for the Surf user factory, a custom authenticator for connections between Share and the Repository, and a custom login web script on the Repository tier. The latter one used the email to uniquely identify the user, resolve to the technical user name and then perform the normal authentication procedure (similar to default login web script).
Apart from the login page, all components required custom Java development.
If you search the internet a bit, you'll also find a couple of addons that do or at least claim to offer login by email functionality.