| 网站首页 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛 |
 
 
 
您现在的位置: 编程中国 >> 技术教程 >> 开发语言 >> VC++ >> VC技术资料 >> 正文
  ►  编程实现邮件地址有效性检测
编程实现邮件地址有效性检测
作者:不祥    阅读人次:……    文章来源:不祥    发布时间:2007-9-5    网友评论()条
 
    这个VB6COM组件提供了一项即时邮件查询的功能。它有效的避免了向一个不存在的账户发送邮件的情况。例如,在ASP页面里面检查用户输入的邮件地址是否正确,并避免在你的用户数据库里面存储相关的错误信息。

主要内容

工作原理

让我们首先来看一下这个组件是如何进行工作的。

首先给定一个E-mail地址(例如:someone@somewhere.com),然后它会执行如下的步骤:

1、  将用户名(someone)从域名(somewhere.com)中分离出来;

2、  DNS(域名服务器)上进行查询:域名是否可用;

3、  如果DNS做出响应,它将在服务器上对MX进行查询(Mail Exchanger邮件交换服务器),并试着与在这个域中每一个MX建立会话,直到建立会话成功;

4、  通过使用SMTP协议,它使用VRFY命令和Mail handshakeHELOMAILT FROMRCPT TO)来验证用户名在该域中的存在;

5、  随后组件将返回测试的结果,并给出四种可能的结果:

l     “域”不存在。服务器做出否定响应。

l     “域”存在,但是无法查询用户名(见注释)。服务器做出部分确认响应。

l     “域”存在,但是用户名不存在。服务器做出否定响应。

l     “域”和用户名都存在。服务器做出完全确认响应。

注释:

如果“域”存在,但是MX(邮件交换服务器)并不存在于该域中(典型特征是二级域名由ISP掌握着),这样通过SMTP协议将会无效,应为那些服务器被指派去接受子域中的邮件,并且根本不会检查用户名。所以组建的程序设计,从这里跳出并返回出部分确认响应。

组件特征

l   在本地机器上查找DNS。所以必须保持计算机与互联网的连接以确保组建的正常工作

l   通过SimpleDNSRosolover组件(见Credits)发送DNS请求

l   使用UPD协议接收DNS响应

l   经过标准的winsock.ocx接口,建立SMTP会话

l   提供小型的可执行文件(编译为一个小于50kbActiveX DLL 动态连接库文件)

l   无任何用户接口,需要ActiveX组建支持的语言(例如,VBScript, ASP, VC++等等)

l   使用VB6.0 Service Pack 4(已测试) 环境下编译,当然也可以在以前的支持winsock.ocxVB版本中编译(例如VB5.0

安装方法

l   将压缩包释放到你选定的目录中;

l   VfabEmailUtils.DLL拷贝到你的系统目录下:

对于Windows NTC:\WINNT\SYSTEM32\

对于Windows 9 xC:\WINDOWS\SYSTEM\

l   在注册表中注册组件:

在运行中输入:regsvr32 c:\winnt\system32\VfabEmailUtils.dll

l   重要提示:

为确保组件的正常运行,你必须安装Simple DNS Resolver v1.0Emmanuel Kartmann’s)。相关信息,请看下面的Credits

使用方法

l   创建一个组建的应用实例

l   加入属性:
EmailAddr
SmtpTimeOut
DNS Server Address
(仅限Windows9x

l   调用CheckDomain 方法

l   测试Result属性,如果返回的结果不等于vfbInvalidDomain 1)则可以进行如下操作

l   调用CheckUserName 方法

l   然后测试Result属性来返回最终结果:
vfabNotVerify = 0
vfabInvalidDomain = 1
vfabValidDomain = 2
vfabValidDomainInvalidAccount = 3
vfabValidDomainValidAccount = 4

示例代码

dim oVfab

set oVfab=CreateObject("VFabEmailUtils.EmailCheck")              '创建对象

oVfab.EmailAddr = Request.Form("EMAIL")

'ASP页面获得邮件地址以进行测试,

'并指派给该对象中的EmailAddr属性

oVfab.CheckDomain                                           '检查域是否存在

If oVfab.Result <> 1 Then

'如果存在则对用户名进行检测

oVfab.SmtpTimeOut = 10                                  '给该对象10秒钟的时间用来连接远程SMTP服务器

oVfab.CheckUserName                                    '尝试进行SMTP会话,测试用户名

End If

……                                                        '在这里可以用HTML格式显示会话纪录

oVfab.Clear                                                  '关闭连接, 清除日志, 恢复初始状态

组件文档

方法(表1):

名称

描述

CheckDomain()

检查邮件地址中的域名部分是否是有效的(存在的)域名

CheckUserName()

通过SMTP协议检查用户名是否是该域中的有效邮件账号

Clear()

在结束任务之后,关闭连接, 清除日志, 恢复初始状态

1

属性(表2):

名称

类型

可读

可写

描述

EmailAddr

String

Yes

Yes

指定要检验的邮件地址

Result

Integer

Yes

No

CheckDomain 和(或)CheckUserName 方法中获得处理结果

SmtpTimeOut

Integer

Yes

Yes

获得/设置Timeout(超时-秒计)等待SMTP连接

DnsServer

String

Yes

No

设置域名服务器的IP地址(Win9x中为必选项,Windows NT 中为可选项)

RealName

String

Yes

No

CheckUserName()被执行后,如果SMTP服务器提供的话,获得用户的真实名称

DomainName

String

Yes

No

获得EmailAddr中的域名部分

UserName

String

Yes

No

获得EmailAddr中的用户名部分

Log(blnHTML)

String

Yes

No

检索会话日志(客户段与服务器的所有信息交换)如果可选参数被设为True,它将重新以HTML格式排列断点以便阅读。

SmtpServer

String

Yes

No

在域中获得完整地邮件交换服务器列表

2

[1] [2] 下一页

 

 
文章录入:编辑01    责任编辑:编辑01 
  • 上一篇文章:

  • 下一篇文章:

  •  
    相关文章
    原创地带
    24小时热门帖子