| 1) Because the solutions actually prevent some users from typing their actual e-mail address. 2) There are so many ways to get the e-mail address wrong that it's almost not worth bothering validating the few things that you can validate. Now, here's what would be an interesting validation method that doesn't actually require sending an e-mail. It requires an RFC-compliant e-mail parser, not a regexp: - Perform A/MX lookups on the domain part. The domain part can be an IP address, so those get a free pass. - Connect to the returned MX, issue a MAIL FROM+RCPT TO: c> MAIL FROM: test@example.org
s> 250 2.1.0 Ok
c> RCPT TO: is_address_valid@example.com
s> 554 5.7.1 <is_address_valid@example.com>: Relay access denied
c> RSET [reset the transaction, no e-mail is sent]
- If you get back a permanent 5xx error, the address is invalid. If you get back a 250 Ok, the address is probably valid (it could still be a relay that allows backscatter, in which case it will allow any address on one of its configured domains). If you receive a 4xx, the address may or may not be valid -- graylisters will send 4xx, as will servers that can't currently accept e-mail, etc.This gives you definitive failure (5xx) and almost-definitive success (250 Ok). It's a cheap DNS lookup + TCP connection that you can begin performing immediately and asynchronously when a user enters their address in a form. ... or just send the user an activation e-mail. |