|
Protected Function SmtpAuth(ByRef ns As NetworkStream) As Boolean
'向服务器发送用户名密码验证信息Dim SendBuffer As New ArrayList
Dim SendBufferstr As String
SendBufferstr = "EHLO " & SmtpServer & vbNewLine '发送EHLO命令
If SendCommand(SendBufferstr, ns) Then
Dim i As Integer = 0
Do
If ns.DataAvailable Then
Dim RR As String = RecvResponse(ns)
If RR = "false" Then Return False
Dim RRCode As String = RR.Substring(0, 3)
If Not RghCodeHT(RRCode) = Nothing Then
If RR.IndexOf("AUTH") <> -1 Then Exit Do
Else
Return False
End If
Else
System.Threading.Thread.Sleep(50)
i = i + 1
If i > 60 Then
Return False
End If
End If
Loop
Else
Return False
End If
SendBuffer.Add("AUTH LOGIN" & vbNewLine) '发送用户名密码
SendBuffer.Add(Base64.Encode(smtpUserName) & vbNewLine)
SendBuffer.Add(Base64.Encode(smtpPassWord) & vbNewLine)
Return Dialog(SendBuffer, ns)
End Function
Protected Function RecvResponse(ByRef ns As NetworkStream) As String
'从SMTP服务器接收一个回应
Dim StreamSize As Integer
Dim ReturnValue As String = ""
Dim ReadBuffer(1023) As Byte
Try
StreamSize = ns.Read(ReadBuffer, 0, 1024)
Catch ex As Exception
Return "false"
End Try
If StreamSize = 0 Then
Return ""
Else
ReturnValue = Encoding.Default.GetString(ReadBuffer).Substring(0, StreamSize)
Return ReturnValue
End If
End Function
Shared Sub New()
'添加一个SMTP反回信息的对照哈希表
ErrCodeHT.Add("500", "邮箱地址错误")
ErrCodeHT.Add("501", "参数格式错误")
ErrCodeHT.Add("502", "命令不可实现")
ErrCodeHT.Add("503", "服务器需要SMTP验证")
ErrCodeHT.Add("504", "命令参数不可实现")
ErrCodeHT.Add("421", "服务未就绪,关闭传输信道")
ErrCodeHT.Add("450", "要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)")
ErrCodeHT.Add("550", "要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)")
ErrCodeHT.Add("451", "放弃要求的操作;处理过程中出错")
ErrCodeHT.Add("551", "用户非本地,请尝试<forward-path>")
ErrCodeHT.Add("452", "系统存储不足,要求的操作未执行")
ErrCodeHT.Add("552", "过量的存储分配,要求的操作未执行")
ErrCodeHT.Add("553", "邮箱名不可用,要求的操作未执行(例如邮箱格式错误)")
ErrCodeHT.Add("432", "需要一个密码转换")
ErrCodeHT.Add("534", "认证机制过于简单")
ErrCodeHT.Add("538", "当前请求的认证机制需要加密")
ErrCodeHT.Add("454", "临时认证失败")
ErrCodeHT.Add("530", "需要认证")
RghCodeHT.Add("220", "服务就绪")
RghCodeHT.Add("250", "要求的邮件操作完成")
RghCodeHT.Add("251", "用户非本地,将转发向<forward-path>")
RghCodeHT.Add("354", "开始邮件输入,以<CRLF>.<CRLF>结束")
RghCodeHT.Add("221", "服务关闭传输信道")
RghCodeHT.Add("334", "服务器响应验证Base64字符串")
RghCodeHT.Add("235", "验证成功")
End Sub
End Class
End Namespace
|