|
Public Sub CheckUserName() '声明定义CheckUserName()方法
Dim strHost As String, i As Integer, intOldStep As Integer
i = 1 '在这里定义循环初始值,并以之为计数标志分割strSmtpServers
……
Do While True '开始进行循环1
strHost = Trim(LTrim(Token(strSmtpServers, ",", i)))
'以”,”为分隔符分离字符串中的所有地址,使之各个独立,
'i是计数标志,下面对TOKEN()的声明定义中再作解释。
If strHost = "" Then '如果发现在“,”后有空地址
Exit Do '跳出循环
End If
If InStr(strHost, strDomainName) > 0 Then '如果域名以前的部分不是空
With oWinsock '设置oWinsock对象所使用的
.Protocol = sckTCPProtocol '协议为TCP
.RemoteHost = strHost '主机地址为strHost的值
.RemotePort = 25 '通信端口为25
.Connect '并进行连接
dblTimeOut = intSmtpTimeOut '设置超时
intStep = 1 '将步骤索引intStep设为1
Do While .State <> sckConnected '如果套接字状态是非连接,开始循环2
Sleep 100 '延迟100ms
DoEvents '执行oWinsock包含事件DataArrival
'DataArrival事件是用来对接收到的
'做出反应用的;事件的定义在下面可以找到
'该事件发生之后,会影响intStep、连接状态等
dblTimeOut = dblTimeOut - 0.1 '超时减0.1秒
Loop
If .State <> sckConnected Then '如果套接字状态是非连接
Exit Sub '跳出函数体,结束对该方法的调用
End If
Do While True '循环3
Select Case intStep '依据步骤intStep进行判断
……
Case 2
SendData "VRFY " & strUserName & "@" & strDomainName & vbCrLf '发送待确认请求
Case 3
.Close '关闭套接字
Exit Do '并结束循环3
…… '在这里可以使用mail handshake 方式 相应的步骤 4、5、6
End Select
intOldStep = intStep '保护现场 保存intStep当前值
dblTimeOut = intSmtpTimeOut
'设置超时
Do While intStep = intOldStep And dblTimeOut > 0 '如果没有发生连接超时 进行循环4
Sleep 100 '延时100ms
DoEvents '执行oWinsock包含事件DataArrival
dblTimeOut = dblTimeOut - 0.1
Loop
If dblTimeOut < 0 Then '如果发生超时
intStep = 0 '设置intStep为0
Exit Do '并跳出循环3
End If
Loop
If intStep = 3 Then '如果intStep=3即 已套接字关闭
Exit Do '跳出循环1
End If
.Close '关闭套接字
Sleep 1000
End With
End If
i = i + 1 '对计数标志i进行自增运算,以保证可以读到下一个地址
Loop
End Sub
|