我用winsock开发电子邮件,可是总是出现问题。紧急啦
这是我的代码:
Option Explicit
Dim answerf As Boolean
Sub sendmail(Winsock As Control, frommial As String, tomail As String, captiona As String, content As String, man As String, txtpass As String)
Winsock.Close
Winsock.Connect
waiting
Winsock.SendData "HELLO" + frommial + vbCrLf
waiting
Winsock.SendData "AUTH LOGIN" + vbCrLf
waiting
Winsock.SendData base64encode(man) + vbCrLf
waiting
Winsock.SendData base64encode(txtpass) + vbCrLf
waiting
Winsock.SendData "DATA" + vbCrLf
waiting
Winsock.SendData "DATE:" + Format$(Now, "dd mmm yy ttttt") + vbCrLf
Winsock.SendData "FORM:" + frommial + vbCrLf
Winsock.SendData "TO:" + tomail + vbCrLf
Winsock.SendData "SUBJECT:" + captiona + vbCrLf + vbCrLf
Winsock.SendData content + vbCrLf + "." + vbCrLf
waiting
Winsock.Close
MsgBox "信笺已经发送完毕,谢谢使用!", 48, " 提示"
End Sub
Function myasc(onechar)
If onechar = "" Then
myasc = 0
Else
myasc = Asc(onechar)
End If
End Function
Private Function base64encode(indata)
Const base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim cout, sout, i
For i = 1 To Len(indata) Step 3
Dim ngroup As Long
Dim pout, sgroup
ngroup = &H10000 * Asc(Mid(indata, i, 1)) + &H100 * myasc(Mid(indata, i + 1, 1)) + myasc(Mid(indata, i + 2, 1))
sgroup = Oct(ngroup)
sgroup = String(8 - Len(sgroup), "0") + sgroup
pout = Mid(base64, CLng("&o" & Mid(sgroup, 1, 2)) + 1, 1) + Mid(base64, CLng("&o" & Mid(sgroup, 3, 2)) + 1, 1) + Mid(base64, CLng("&o" & Mid(sgroup, 5, 2)) + 1, 1) + Mid(base64, CLng("&o" & Mid(sgroup, 7, 2)) + 1, 1)
sout = sout + pout
If (i + 2) Mod 57 = 0 Then sout = sout + vbCrLf
Next
Select Case Len(indata) Mod 3
Case 1:
sout = Left(sout, Len(sout) - 2) + "=="
Case 2:
sout = Left(sout, Len(sout) - 1) + "=="
End Select
base64encode = sout
End Function
Public Sub waiting()
Dim pausetime, start
pausetime = 45
start = Timer
Do While Timer < start + pausetime And Not answerf
DoEvents
Loop
answerf = False
End Sub
Private Sub gethost()
On Error Resume Next
Dim i As Integer
i = InStr(1, frommial.Text, "@")
If i <> 0 Then
sendername.Text = Mid(frommial.Text, 1, i - 1)
smtpserver.Text = "smtp." + Mid(frommial.Text, i + 1, Len(frommial.Text) - i)
End If
If Err Then
MsgBox "输入了非法数据!", 48, "提示"
Exit Sub
End If
End Sub
Private Sub frommial_Change()
gethost
End Sub
Private Sub send_Click()
On Error Resume Next
Winsock1.Close
Winsock1.RemoteHost = smtpserver.Text
Winsock1.RemotePort = "25"
Call sendmail(Winsock1, frommial.Text, tomail.Text, captiona.Text, content.Text, sendername.TabIndex, txtpass.Text)
End Sub
请大家帮我看看好吗?
重点的错误在于:
第一个函数中的“Winsock.Connect”
难道我这样写有错误的吗?