> I want the server to have a simple temporary domain,
I'd stick to 127.0.0.1 until you have something sensible working. Otherwise, it just becomes yet another unknown you have to grapple with.
> also I want to bind the domain to my IP how do I do it, is there a free solution (domain) available?
Yeah, stick with 127.0.0.1.
As soon as it becomes public facing, there's a whole new level of configuration to do to convince the upstream mail agents that you're not some drive-by spam domain.
Your public facing address will get scanned, and if it looks like an open mail relay, you're going to have a hard time.
> So, the question is, How do I implement the protocols? do I need all three (IMAP,SMTP,POP3)?
Well you need to read all the relevant RFC's.
https://www.rfc-editor.org/
> I'm thinking to use Boost::asio, is this the proper library tool for the client and server?
How many internet facing programs have you written already?
If you're doing something new, it's better if you're only ignorant about one thing at once. If solving a problem with one unknown takes X time, then solving the same problem with two unknowns is closer to X
2 time than it is to 2X time.
> also what more I need to know?
https://afreshcloud.com/sysadmin/mail-terminology-mta-mua-msa-mda-smtp-dkim-spf-dmarc