I would suggest a function.
In the user Profile page, display an email contact, if another user want to contact.
The user can choose not to display an email.
Sorry bad English.
There is an internal messaging system ucp.php?i=pm&folder=inbox
I see. However, it is just for members contact one another in the forum.
Sometimes I find an user through the coverage map and, even I want, I cannot contact him directly. It happens because there isn’t any contact way there, only in the forum, and some users are not registered in the forum.
Not many people want to give out or publish email addresses. Privacy and spam reasons are just the start.
In th PM system you can easily block someone. It also helps to know the context (FA, github, ham radio etc). I delete most email from unknown sources without even looking at it.