如何使用PHP检查电子邮件地址是真实还是有效的
是否有可能检查一个电子邮件是否存在类似于这个网站?
http://verify-email.org/
<?php if($_POST['email'] != ''){ // The email to validate $email = $_POST['email']; // An optional sender function domain_exists($email, $record = 'MX'){ list($user, $domain) = explode('@', $email); return checkdnsrr($domain, $record); } if(domain_exists($email)) { echo('This MX records exists; I will accept this email as valid.'); } else { echo('No MX record exists; Invalid email.'); } } ?> <form method="POST"> <input type="text" name="email"> <input type="submit" value="submit"> </form>
这就是我现在所拥有的。 它检查域是否存在 , 但不能检查用户的电子邮件是否存在于该域中 。 是否有可能使用PHP来做到这一点?
你应该检查SMTP。
这意味着你必须连接到该电子邮件的SMTP服务器。
连接到SMTP服务器后,您应该发送这些命令:
HELO somehostname.com MAIL FROM: <no-reply@gmail.com> RCPT TO: <emailtovalidate@domain.com>
如果您收到“<emailtovalidate@domain.com>:拒绝中继访问”,则表示此电子邮件无效。
有一个简单的PHP类。 你可以使用它:
http://www.phpclasses.org/package/6650-PHP-Check-if-an-e-mail-is-valid-using-SMTP.html
您无法validation电子邮件是否实际存在,而无需向该帐户发送电子邮件。 但你可以validation它至less格式化为一个
if(filter_var($email, FILTER_VALIDATE_EMAIL)) { //Email is valid }
你可以添加另一个检查,如果你想。 parsing域名,然后运行checkdnsrr
if(checkdnsrr($domain)) { // Domain at least has an MX record, necessary to receive email }
由于人们一直在低调地回答这个问题,所以如果您想要validation电子邮件,请注意以下事项:
-
垃圾邮件制造者也会这样做,所以不要以为所有的服务器都会以同样的方式回应。 其他答案之一链接到这个库有这个警告
某些邮件服务器会默默拒绝testing邮件,以防止垃圾邮件发送者检查用户的电子邮件并过滤有效的电子邮件,所以此function可能无法在所有邮件服务器上正常工作。
所以,如果有一个无效的地址,你可能不会得到一个无效的地址响应。 最高的答复没有提到这一点。
-
垃圾邮件列表。 是的,你可以被列入黑名单,试图做到这一点(记得我说垃圾邮件发送者也知道这些技巧)。 他们黑名单的IP地址,如果您的服务器不断这样做,validation连接。 你有在Spamhaus或另一个阻止名单上结束的风险。 如果你被列入黑名单,你有什么好处来validation电子邮件地址?
-
如果validation电子邮件地址真的非常重要,则可接受的方法是强制用户回复电子邮件。 给他们一个完整的电子邮件,他们必须点击链接进行validation。 这不是垃圾邮件,你仍然可以validation它是否有效。
我遇到过EmailPie
https://github.com/bryanhelmig/emailpie ,它需要这个安装:
确保redis已安装并在标准端口上运行!
git clone git@github.com:bryanhelmig/emailpie.git cd emailpie mkvirtualenv emailpie pip install -r requirements python rundev.py Visit http://localhost:5000/v1/check?email=test@gmail.com
我一直都在search这个相同的答案,而且几乎发现,在你需要validation的时候,你可能不可能validation你需要检查的每个邮件地址是否真的存在。 所以作为解决方法,我创build了一个简单的PHP
脚本来validation电子邮件地址是否格式正确,并validation所使用的域名是否正确。
GitHub
在这里https://github.com/DukeOfMarshall/PHP—JSON-Email-Verification/tree/master
<?php # What to do if the class is being called directly and not being included in a script via PHP # This allows the class/script to be called via other methods like JavaScript if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])){ $return_array = array(); if($_GET['address_to_verify'] == '' || !isset($_GET['address_to_verify'])){ $return_array['error'] = 1; $return_array['message'] = 'No email address was submitted for verification'; $return_array['domain_verified'] = 0; $return_array['format_verified'] = 0; }else{ $verify = new EmailVerify(); if($verify->verify_formatting($_GET['address_to_verify'])){ $return_array['format_verified'] = 1; if($verify->verify_domain($_GET['address_to_verify'])){ $return_array['error'] = 0; $return_array['domain_verified'] = 1; $return_array['message'] = 'Formatting and domain have been verified'; }else{ $return_array['error'] = 1; $return_array['domain_verified'] = 0; $return_array['message'] = 'Formatting was verified, but verification of the domain has failed'; } }else{ $return_array['error'] = 1; $return_array['domain_verified'] = 0; $return_array['format_verified'] = 0; $return_array['message'] = 'Email was not formatted correctly'; } } echo json_encode($return_array); exit(); } class EmailVerify { public function __construct(){ } public function verify_domain($address_to_verify){ // an optional sender $record = 'MX'; list($user, $domain) = explode('@', $address_to_verify); return checkdnsrr($domain, $record); } public function verify_formatting($address_to_verify){ if(strstr($address_to_verify, "@") == FALSE){ return false; }else{ list($user, $domain) = explode('@', $address_to_verify); if(strstr($domain, '.') == FALSE){ return false; }else{ return true; } } } } ?>
你应该检查电子邮件是否有MXlogging。 Zend-Framwork的filter组件具有对MXloggingvalidation电子邮件的方法。