当前位置: 移动技术网 > IT编程>开发语言>.net > C# 邮件地址是否合法的验证

C# 邮件地址是否合法的验证

2018年02月26日  | 移动技术网IT编程  | 我要评论

张杰qq透明皮肤,osd-411,平原一中网站

复制代码 代码如下:

/// <summary>
/// 检测输入的邮件地址stremail是否合法,非法则返回true。
/// </summary>
public bool checkemail(string stremail)
{
int i, j;
string strtmp, strresult;
string strwords = "abcdefghijklmnopqrstuvwxyz_-.0123456789"; //定义合法字符范围
bool blresult = false;
strtmp = stremail.trim();
//检测输入字符串是否为空,不为空时才执行代码。
if (!(strtmp == "" || strtmp.length == 0))
{
//判断邮件地址中是否存在“@”号
if ((strtmp.indexof("@") < 0))
{
blresult = true;
return blresult;
}
//以“@”号为分割符,把地址切分成两部分,分别进行验证。
string[] strchars = strtmp.split(new char[] { '@' });
foreach (string strchar in strchars)
{
i = strchar.length;
//“@”号前部分或后部分为空时。
if (i == 0)
{
blresult = true;
return blresult;
}
//逐个字进行验证,如果超出所定义的字符范围strwords,则表示地址非法。
for (j = 0; j < i; j++)
{
strresult = strchar.substring(j, 1).tolower();//逐个字符取出比较
if (strwords.indexof(strresult) < 0)
{
blresult = true;
return blresult;
}
}
}
}
return blresult;
}

c#验证email是否真正存在,不是验证邮件格式,是邮件地址是否存在

在以往的编程中,比如编写用户的资料时,有时需要确认用户输入的email是否真实有效,以前我们最多只能做到验证email是否包含了某些特殊的字符,比如"@",".",".com"等,做到的只是判断了email的合法性,证明用户填写的email格式是正确的,但是这个email是否真正的存在于网络中,则没有办法。
 首先需要大家了解一下smtp协议。
1.smtp是工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个
  服务器
2.smtp是个请求/响应协议,命令和响应都是基于ascii文本,并以cr和lf符结束。响应包括一个表示返 
  回状态的三位数字代码
3.smtp在tcp协议25号端口监听连接请求
4.连接和发送过程
smtp协议说复杂也不复杂(明明带有“简单”这个词嘛),说简单如果你懂得sock。不过现在只是我们利用的就是第一条中说的,从客户机传输到服务器,当我们向一台服务器发送邮件时,邮件服务器会首先验证邮件发送地址是否真的存在于本服务器上。
操作的步骤如下:
连接服务器的25端口(如果没有邮件服务,连了也是白连)
发送helo问候
发送mail from命令,如果返回250表示正确可以,连接本服务器,否则则表示服务器需要发送人验证。
发送rcpt to命令,如果返回250表示则email存在
发送quit命令,退出连接
下面我们就来操作这个流程:
首先看看页面构架:
复制代码 代码如下:

<b>普通的email验证</b>
<form runat="server">
<table boder="#6699ff">
<tr><td colspan="2" align="center" ><asp:label id="lblmsgshow" forecolor="red" runat="server" /></td></tr>
<tr><td>需要验证的email地址:</td><td><asp:textbox id="tbemail" runat="server" /></td></tr>
<tr><td>邮件smtp服务器:</td><td><asp:textbox id="tbserver" runat="server" /></td></tr>
<tr><td>smtp端口:</td><td><asp:textbox id="tbport" text="25" runat="server" /></td></tr>
<tr><td colspan="2" ><asp:button id="btnvalidate" text="验证" onclick="validate_email" runat="server" /></td></tr>
</table>
<b>验证过程展示:</b>
<asp:panel id="showpro" runat="server" />
</form>
button控件的点击将激发valiate_email事件,所有主程序操作全是在这个事件中完成,下面就来具体讲解本事件处理中的代码。
关于tcp连接的东东,我就不想再重复了。。请大家自己去看我以前的文章:
string stremail,strserver;
int intport;
stremail = tbemail.text;
strserver = tbserver.text;
intport = int32.parse(tbport.text); file://默认端口是25
tcpclient tcpc = new tcpclient();

服务器等信息来自于用户输入,建立与服务器25端口的连接。
复制代码 代码如下:

try
{
tcpc.connect(strserver,intport);
streamreader sr = new streamreader(tcpc.getstream(),encoding.default);
sr.readline();
...
}

请注意上面代码中两点:一在beta2中不能再通过判断返回值的方法来判断建立的连接是否成功,只能通过捕捉错误例外的方法判断;二在打开连接,使用stream读取时,必须有一个sr.readline,一行是服务器的欢迎信息加版本信息。

接下来就是按照上面所说的步骤来完成操作:
复制代码 代码如下:

file://写入helo命令
if(operastream(tcpc,"helohttp://www.webjx.com") != "250")
{
lblmsgshow.text = "helo 命令不能完成,本端口可能并非提供smtp服务";
operastream(tcpc,"quit");
return;
}
file://写入mail from命令
if(operastream(tcpc,"mail from: web@webjx.com") != "250")
{
lblmsgshow.text = "mail命令不能完成,smtp服务需要验证";
operastream(tcpc,"quit");
return;
}
file://写入rcpt命令,这是关键的一步,后面的参数便是查询的email的地址
if(operastream(tcpc,"rcpt to: "+stremail) != "250")
{
lblmsgshow.text = stremail + "此邮件地址并非有效";
operastream(tcpc,"quit");
return;
}
else
{
lblmsgshow.text = stremail + "是一个合法有效的邮件地址";
operastream(tcpc,"quit");
return;
}

helo命令后面的主机名,在某些邮件服务器中不需要比如imail,但是还是写上好,当然你也可以乱写骗服务器,不过一般来说服务器都能检查出来。

其中operastrem是我们是自定义的函数,用于操作连接流:
复制代码 代码如下:

public string operastream(tcpclient tcpc,string strcmd)
{
stream tcpstream;
strcmd = strcmd + "\r\n"; file://加入换行符
tcpstream = tcpc.getstream();
byte[] bwrite = encoding.default.getbytes(strcmd.tochararray());
tcpstream.write(bwrite,0,bwrite.length);
streamreader sr = new streamreader(tcpc.getstream(),encoding.default);
string rl = sr.readline();
string sp = rl.substring(0,3);
showpro.controls.add(new literalcontrol("执行命令:<font color=red>"+strcmd+"</font><br/>返回数据:"+rl+"<br/>"));
return sp;
}

此函数的返回值是流的信息代码,用于判断操作是否成功,250表示成功,550表示只能适用于本地邮件,也就是说发件人必须是该服务器上的用户,比如在连接smtp.163.net,就必须拥有一个真实有效的163.net帐号,这种做法是服务器防止外人使用服务发送垃圾邮件

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网