求:PHP测试邮箱真实有效的方法或类? 发邮件用什么发啊?mail能发吗?如果没有邮件服务器能发吗?用PHP如何实现发? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我模糊记得quickform可以验证邮箱格式,,和邮箱是否有效(邮箱存在).. 没有邮件服务器...那不会发你还是试试willko的quickform吧...邮箱有效性需要交互才能实现,我觉得不太可能直接本地实现 不真正发邮件也可以.使用SMTP协议来做步骤如下:1.连接服务器的25端口(如果没有邮件服务,连了也是白连)2.发送helo问候3.发送mail from命令,如果返回250表示正确可以,连接本服务器,否则则表示服务器需要发送人验证。4.发送rcpt to命令,如果返回250表示则Email存在5.发送quit命令,退出连接 这个看你对真实信息的重视级别来做了,通常要验证邮件的真实性,例如51job之类的,会发激活信去处理,所以不填正确的邮件是注册不了的。 各位说的都要道理!netvt说的也是我想要的!当然,发验证码最好,但有时会觉得麻烦!所以想看看有没有简单的方法!我查了一下,发现一般是如下验证的:第一是正则匹配格式;第二个有的人测试域名是否要有效,即@之后的部分第三个是好象用socket取各个部分测试!好象和netvt说的一样!另查了一下,另也有相关的不用smtp的PHP邮件类!各位有没有实例?SMTP和非SMTP类均可!或有邮件协议方面的资料也行! 如果通过连接SMTP服务器来验证邮箱是否真实 有个问题是SMTP地址不好弄 正则匹配只是验证邮箱地址是否符合 邮箱的形式 不能验证是否有效 只能用验证邮件 但不一定非要用户打开邮件 检查是否退信也可以间接知道邮件是否真实 当然不太可靠 这个程序是直接验证邮箱是否真实有效的函数,checkmail是主函数,使用时请直接使用即可,注意:因使用了DNS函数,该程序不能运行在Windows系统之下,使用Linux和FreeBSD都测试通过。<?set_time_limit(0);if($_POST["mail"]!=""){ echo "电子邮件地址:".$_POST["mail"]; if( checkmail($_POST["mail"])) echo " — <font color=green>有效</font>"; else echo " — <font color=red>无效</font>";}?><form method=post action=""><input type=text name=mail ><input type="submit" value="检查"></form><?function server_parse($socket, $response, $line = __LINE__){ while (substr($server_response, 3, 1) != ' '){ if (!($server_response = fgets($socket, 512))){ return false; } } if (!(substr($server_response, 0, 3) == $response)){ return false; } return true;}function checkmail($strMail){ $arrMail=explode("@",$strMail); if(! getmxrr ( $arrMail[1], $mxhosts ,$bb))return -1; if($mxhosts[0]=="")return -1;//不能获得主机的MX信息 $cc=false; for($i=0;$i<count($mxhosts);$i++){ echo $mxhosts[$i]." "; if( $socket = @fsockopen($mxhosts[$i], 25, $errno, $errstr, 5) ){ if(server_parse($socket, "220", __LINE__)){ $cc=true; break; } } } if($cc==false)return -2;//不能打开主机 fputs($socket, "HELO ".$arrMail[1]." "); if(!server_parse($socket, "250", __LINE__))return -3; srand((double)microtime()*1000000); $randval = substr(md5(uniqid(rand())),0,6); fputs($socket, "MAIL FROM:<[email protected]> "); //使用是请将testemail.com改成你网站的域名 if(!server_parse($socket, "250", __LINE__))return -4; fputs($socket, "RCPT TO:<$strMail> "); if(!server_parse($socket, "250", __LINE__))return -5;//无效的用户名 fclose($socket); return true; }?> php怎么获取百度音乐API地址!《急》 循环语句输出问题 关于$_GET的问题 php输入数字限制 php mysql 缓存问题? mysql版本问题(讨论) 一般从php网站找bug怎么开始 谁能给个Blowfish的使用代码? 高手请支个招:一个关于php.ini中的session设置的问题,先谢了,小弟在线等候!!! 一个简单的问题,如何计算年龄?? 将重复记录只显示一次。 请教个XML的问题
邮箱有效性需要交互才能实现,我觉得不太可能直接本地实现
步骤如下:
1.连接服务器的25端口(如果没有邮件服务,连了也是白连)
2.发送helo问候
3.发送mail from命令,如果返回250表示正确可以,连接本服务器,否则则表示服务器需要发送人验证。
4.发送rcpt to命令,如果返回250表示则Email存在
5.发送quit命令,退出连接
netvt说的也是我想要的!当然,发验证码最好,但有时会觉得麻烦!
所以想看看有没有简单的方法!
我查了一下,发现一般是如下验证的:
第一是正则匹配格式;
第二个有的人测试域名是否要有效,即@之后的部分
第三个是好象用socket取各个部分测试!好象和netvt说的一样!另查了一下,另也有相关的不用smtp的PHP邮件类!各位有没有实例?SMTP和非SMTP类均可!或有邮件协议方面的资料也行!
<?
set_time_limit(0);
if($_POST["mail"]!=""){
echo "电子邮件地址:".$_POST["mail"];
if( checkmail($_POST["mail"]))
echo " — <font color=green>有效</font>";
else
echo " — <font color=red>无效</font>";
}
?><form method=post action="">
<input type=text name=mail ><input type="submit" value="检查">
</form><?function server_parse($socket, $response, $line = __LINE__){
while (substr($server_response, 3, 1) != ' '){
if (!($server_response = fgets($socket, 512))){
return false;
}
}
if (!(substr($server_response, 0, 3) == $response)){
return false;
}
return true;
}function checkmail($strMail){
$arrMail=explode("@",$strMail);
if(! getmxrr ( $arrMail[1], $mxhosts ,$bb))return -1;
if($mxhosts[0]=="")return -1;//不能获得主机的MX信息
$cc=false;
for($i=0;$i<count($mxhosts);$i++){
echo $mxhosts[$i]." ";
if( $socket = @fsockopen($mxhosts[$i], 25, $errno, $errstr, 5) ){
if(server_parse($socket, "220", __LINE__)){
$cc=true;
break;
}
}
}
if($cc==false)return -2;//不能打开主机
fputs($socket, "HELO ".$arrMail[1]." ");
if(!server_parse($socket, "250", __LINE__))return -3; srand((double)microtime()*1000000);
$randval = substr(md5(uniqid(rand())),0,6);
fputs($socket, "MAIL FROM:<[email protected]> ");
//使用是请将testemail.com改成你网站的域名
if(!server_parse($socket, "250", __LINE__))return -4; fputs($socket, "RCPT TO:<$strMail> ");
if(!server_parse($socket, "250", __LINE__))return -5;//无效的用户名 fclose($socket);
return true;
}
?>