我用winsock开发电子邮件,可是总是出现问题。紧急啦

allan1031 2001-12-03 08:31:46
这是我的代码:
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”
难道我这样写有错误的吗?
...全文
144 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sonicdater 2001-12-03
  • 打赏
  • 举报
回复
我只能给你方法 思路,程序要自己写。 不过你已写得 差不多了,改改 就成。

看:
http://www.csdn.net/expert/topic/401/401401.shtm
allan1031 2001-12-03
  • 打赏
  • 举报
回复
那么我要怎么来实现这个验证呢
29已经是我能给出的最高分数了
我是菜鸟:)
sonicdater 2001-12-03
  • 打赏
  • 举报
回复
才给 29 分?小心没人来帮你,呵呵……
sonicdater 2001-12-03
  • 打赏
  • 举报
回复
Winsock.SendData "HELLO" + frommial + vbCrLf

这句命令有错 ,改为:
Winsock.SendData "HELO" + frommial + vbCrLf

另外,你这个也没 能实现 SMTP 服务器的 验证。 也许 这也是你不能通过 调试的原因。

程序其它部分 ,我还没仔细看。太长了。:(
allan1031 2001-12-03
  • 打赏
  • 举报
回复
拜托大家啦

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧