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   |