当前位置: 技术问答>java相关
如何判断一个信箱地址有效(判断一个信箱地址存在)
来源: 互联网 发布时间:2015-02-02
本文导语: 假如信箱地址为12@yeah.com ,如何判断信箱地址存在 | 我以前做PHP时曾对这个问题做过讨论。给你这篇文章吧。 虽说是PHP的但是思路你可以参考一下,三级方法不过最后的方法实在太慢虽然准...
假如信箱地址为12@yeah.com ,如何判断信箱地址存在
|
我以前做PHP时曾对这个问题做过讨论。给你这篇文章吧。
虽说是PHP的但是思路你可以参考一下,三级方法不过最后的方法实在太慢虽然准确。
-------------------------
电子邮件地址校验的方式探讨
在应用程序中,我们经常要对用户输入的电子邮件地址进行校验,有避免一些无聊的人给一些错误的 email地址。校验的方法有很多种,本文从最基本的校验方式开始,对电子邮件地址校验方法做一个小结。
1、用 Dreamweaver 3 生成的 javascript 脚本进行基本验证
在 Behaviors | Validate Form | Accept Email Address 选项里对电子邮件地址输入的文本框进行校验。DW会自动生成一段相应的 javascript 代码,你可以修改其中的报错显示语句,比如改成中文。
通过对其代码的分析,可以看出,它仅是简单地判断一下是否有 @ 字符。
判断语句如下:
p=val.indexOf('@');
if (p
其基本原理是检查输入的 E-Mail 字符串是否有 @ 字符,在 @ 字符前有英文字母或数字,在之后有数节字符串,最后的小数点后只能有二个或三个英文字母。
新的 javascript 也提供了对正则表达式支持,所以我们也可以直接在客户端进行校验,而无需提交到服务器了。
这样只需把上述php程序改成 javascript 程序就可。
function CheckEmail(email) //给一个地址
{
var pattern = /^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$/;
if(pattern.test(str)) return true;
else {
alert("请输入正确的email地址");
return false;
}
}
这种校验方法是我们最常用的,但也存在局限,比如, aaa@bbb.cc 这种明显是不存在的地址也会被通过。
3、用往 Socket 端口发送 SMTP 信息的方法来进行校验
其实,我们还有一种比较麻烦但是更加严格的校验方式,就是利用 Socket 口往用户提供的信箱中发送 SMTP 指令。
本方法用到的一些 SMTP 的常用指令,我就不给出说明了,有兴趣的朋友可以参考一下www.oso.com.cn的《用Socket发送电子邮件》一文或是读一些相关的资料。
以下给出一个函数,来自《PHP程序设计》一书,它就是用这种方法来实现对 email地址的验证,不过我测试了一下,太慢了!如果我们把它简化一点,如只发一个 HELLO指令,不知可否?(我没试过)
function validateEmail ($email){
global $SERVER_NAME;
$return = array(false, "" );
list ($user, $domain) = split("@", $email, 2);
$arr = explode(".", $domain);
$count = count ($arr);
$tld = $arr[$count - 2] . "." . $arr[$count - 1];
if(checkdnsrr($tld, "MX")) {
if(getmxrr($tld, $mxhosts, $weight)) {
for($i = 0; $i 0) && ($out == "")){
break;
}
else {
$s++;
}
if($s == 9999) {
break;
}
} while($out == "");
set_socket_blocking($fp, true);
fputs($fp, "HELO $SERVER_NAMEn");
$output = fgets ($fp, 2000);
fputs($fp, "MAIL FROM: n" );
$output = fgets($fp, 2000);
fputs($fp, "RCPT TO: n");
$output = fgets($fp, 2000);
if(ereg( "^250", $output )) {
$return[0] = true;
}
else {
$return[0] = false;
$return[1] = $output;
}
fputs ($fp, "QUITn");
fclose($fp);
if($return[0] == true){
break;
}
}
}
}
}
return $return;
}
好了,如果我们结合第二和第三种方法,那么……… 嘿嘿!你就甭想耍我了。
有什么问题,请与我联系 ycshowtop@21cn.com
虽说是PHP的但是思路你可以参考一下,三级方法不过最后的方法实在太慢虽然准确。
-------------------------
电子邮件地址校验的方式探讨
在应用程序中,我们经常要对用户输入的电子邮件地址进行校验,有避免一些无聊的人给一些错误的 email地址。校验的方法有很多种,本文从最基本的校验方式开始,对电子邮件地址校验方法做一个小结。
1、用 Dreamweaver 3 生成的 javascript 脚本进行基本验证
在 Behaviors | Validate Form | Accept Email Address 选项里对电子邮件地址输入的文本框进行校验。DW会自动生成一段相应的 javascript 代码,你可以修改其中的报错显示语句,比如改成中文。
通过对其代码的分析,可以看出,它仅是简单地判断一下是否有 @ 字符。
判断语句如下:
p=val.indexOf('@');
if (p
其基本原理是检查输入的 E-Mail 字符串是否有 @ 字符,在 @ 字符前有英文字母或数字,在之后有数节字符串,最后的小数点后只能有二个或三个英文字母。
新的 javascript 也提供了对正则表达式支持,所以我们也可以直接在客户端进行校验,而无需提交到服务器了。
这样只需把上述php程序改成 javascript 程序就可。
function CheckEmail(email) //给一个地址
{
var pattern = /^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$/;
if(pattern.test(str)) return true;
else {
alert("请输入正确的email地址");
return false;
}
}
这种校验方法是我们最常用的,但也存在局限,比如, aaa@bbb.cc 这种明显是不存在的地址也会被通过。
3、用往 Socket 端口发送 SMTP 信息的方法来进行校验
其实,我们还有一种比较麻烦但是更加严格的校验方式,就是利用 Socket 口往用户提供的信箱中发送 SMTP 指令。
本方法用到的一些 SMTP 的常用指令,我就不给出说明了,有兴趣的朋友可以参考一下www.oso.com.cn的《用Socket发送电子邮件》一文或是读一些相关的资料。
以下给出一个函数,来自《PHP程序设计》一书,它就是用这种方法来实现对 email地址的验证,不过我测试了一下,太慢了!如果我们把它简化一点,如只发一个 HELLO指令,不知可否?(我没试过)
function validateEmail ($email){
global $SERVER_NAME;
$return = array(false, "" );
list ($user, $domain) = split("@", $email, 2);
$arr = explode(".", $domain);
$count = count ($arr);
$tld = $arr[$count - 2] . "." . $arr[$count - 1];
if(checkdnsrr($tld, "MX")) {
if(getmxrr($tld, $mxhosts, $weight)) {
for($i = 0; $i 0) && ($out == "")){
break;
}
else {
$s++;
}
if($s == 9999) {
break;
}
} while($out == "");
set_socket_blocking($fp, true);
fputs($fp, "HELO $SERVER_NAMEn");
$output = fgets ($fp, 2000);
fputs($fp, "MAIL FROM: n" );
$output = fgets($fp, 2000);
fputs($fp, "RCPT TO: n");
$output = fgets($fp, 2000);
if(ereg( "^250", $output )) {
$return[0] = true;
}
else {
$return[0] = false;
$return[1] = $output;
}
fputs ($fp, "QUITn");
fclose($fp);
if($return[0] == true){
break;
}
}
}
}
}
return $return;
}
好了,如果我们结合第二和第三种方法,那么……… 嘿嘿!你就甭想耍我了。
有什么问题,请与我联系 ycshowtop@21cn.com