It is impossible to do a final validation of an email address because many destination SMTP servers accept messages even for addresses that do not exist, and perhaps only then return a message to a sender stating that the email is not valid.
However, what you can do is to simulate sending a message to the given e-mail address and see if the destination SMTP server would accept the recipient.
To do this you need to consult the DNS to obtain the MX record of the informed domain so that you know what the server is or the servers that would receive the message for that domain. It can give 1 server, several or even none. In the latter case the server to be used must be that of the domain A record.
It connects to port 25 of each of the servers. If one of them already refuses the recipient, you already know that it is invalid. If one of them accepts, you already know that it is valid. If no server accepts the connection or gives an error with code 4XX, you can not tell if it is valid, as it is a situation that may be temporary.
Implementing this algorithm properly is a little painstaking. However I myself have developed a class of PHP for email validation which already implements these steps all and has been improved since 1999.
In addition, the class also allows you to define a list of domains that you will never want to accept, such as temporary e-mail.