About

This is a free online email verification tool. It's actually connecting to the email recipient's mail server and checking whether the mailbox in question really exists and that email can be delivered to it. It works if your PHP setup allows connecting to remote hosts on port 25.

Try it out

Email address
Options

What's being verified

Contact

If you encounter false positives (or negatives), or you have something you'd like to ask → zytzagoo AT gmail DOT com.

Frequently Asked Questions

1. What's the purpose?
The purpose is to verify that an email address really, really, really exists. I've been working on a project recently and noticed that about 20% of user's accounts have not been fully activated. Typos in email addresses and/or bounced activation emails were the main culprits. After trying out several open source solutions and realising none of them worked for me, I decided to do something about it.
2. How does it work?
It mimics the behaviour of a typical SMTP server. MX records are extracted from a DNS server and a connection is made to the remote SMTP server. What follows is a simulation of sending a message to the intended recipient (the email address you wish to verify). Depending on several possible scenarios (and options), various command exchanging takes place. After the simulation is done, we say bye-bye to the remote server without actually sending any real messages.
3. Do you store or log any email addresses?
For Pete's sake, NO!
4. How fast is it?
It depends on many factors, but usually it's pretty fast. Some SMTP servers out there are slower than others, some implement SPAM protection techniques (in the form of slowing down their response times), some take a few seconds to process certain commands. The class uses (configurable) command-specific timeout values (because the relevant RFCs say so). If you run it like it's supposed to be run (on a server with a decent pipe and a proper setup) — you should be fine.
5. How accurate are the results?
As accurate as they can currently be :). It's being used in production for quite some time now (on several different projects), with no complaints so far. It all really just depends on how you interpret certain scenarios, and on your application's requirements. I tried my best to cover as much as possible:
  • "catch-all" account detection is built-in. Weather you consider such addresses valid or not is up to you.
  • SMTP command exchange is based on relevant RFCs, covering a wide range of possible responses.
  • If a connection is lost in the middle of the exchange, we don't presume anything.
While we're at it, being unable to connect to the remote server could mean several things:
  • the remote server could be overloaded at the moment
  • our server is not allowed to connect to the remote server (if you were to try sending the email via the same server, it would not be able to deliver your message — some use cases consider adresses on such hosts as invalid, others don't)
  • connection problems somewhere in between our server and the remote server
Achieving 100% accuracy is a futile endeavour, since some SMTP servers out there simply accept anything you throw at them. Some act in such a manner only during high loads, others act like that all the time. Only after you disconnect, and they have the message in their queue, do they start processing the message for real. In order to be able to fully validate against such MTAs you would have to implement something on your end that checks if the message you just sent bounced or not. And that gets messy really fast and is not trivial when all the possible cases are considered.
6. Where's the source?
It's over on Github: http://github.com/zytzagoo/smtp-validate-email