我通过winsock 发送邮件时反回如下消息:
553 You are not authorized to send mail as <MAIL FROM:[email protected]>, authentication is required
请问是什么地方出错了?

解决方案 »

  1.   

    现在的Smtp服务器都需要身份验证了,你还没有通过身份验证就发 mailto 命令,这是错误的。
    我又一个简单的发邮件程序,也是用winsock编的,要的话留下邮箱
      

  2.   

    发送的模块:
    Public Answerf As Boolean
    Function SendMail(WSock As Winsock, sFrom As String, sTo As String, sTitle As String, sMsg As String) As Boolean
    On Error GoTo 12
    Dim CodeDoc As String
    Dim StrMessage As String
    'Dim ca As New C64WSock.Connect
    Waiting
    WSock.SendData "HELO " & "发件人" & vbCrLf
    'WSock.SendData "EHLO " & sFrom & vbCrLf
    Waiting
    WSock.SendData "AUTH LOGIN" + vbCrLf
    Waiting
    WSock.SendData B64E("你的用户名") + vbCrLf
    Waiting
    WSock.SendData B64E("你的密码") + vbCrLf
    Waiting
    WSock.SendData "MAIL FROM:<" + sFrom + ">" + vbCrLf
    Waiting
    WSock.SendData "RCPT TO:<" + sTo + ">" + vbCrLf
    Waiting
    WSock.SendData "DATA " + vbCrLf
    Waiting
    'WSock.SendData "DATE:" + Format(Now, "dd mmm yy tttt") + vbCrLf
    'WSock.SendData "FROM:" + sFrom
    'WSock.SendData "TO:" + sTo
    WSock.SendData "SUBJECT:" & sTitle & vbCrLf'Exit Function
    WSock.SendData sMsg & vbLf
    WSock.SendData "." & vbCrLf
    Waiting
    WSock.SendData "QUIT"
    WSock.Close
    SendMail = True
    Exit Function
    12
    SendMail = False
    End Function
    Sub Waiting()
    Dim PauseTime, Start
    PauseTime = 30
    Start = Timer
    Do While Timer < Start + PauseTime And Not Answerf
    'Do While Answerf
      DoEvents
    Loop
    Answerf = False
    End Sub
    Function MyAsc(OneChar)
    If OneChar = "" Then MyAsc = 0 Else MyAsc = Asc(OneChar)
    End Function
    Function B64E(inData)
    Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    Dim sOut, cOut, iFor i = 1 To Len(inData) Step 3
    Dim nGroup As Long
    Dim pOut, sGroupnGroup = &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") + sGrouppOut = 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)
    'Mid(Base64, CLng("&o" + Mid(sGroup, 7, 2)) + 1, 1)
    '
    ' Mid(Base64, CLng("&o" + Mid(sGroup, 3, 2)), 1)
    '
    '+ Mid(Base64, CLng("&o" + Mid(sGroup, 7, 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 i
    Select Case Len(inData) Mod 3
    Case 1
    sOut = Left(sOut, Len(sOut) - 2) + "=="
    Case 2
    sOut = Left(sOut, Len(sOut) - 1) + "="
    End Select
    B64E = sOut
    End Function
    --------------------------------------------------------------------
    使用:
    放一个Winsock控件,然后:
    Wsk.Close
    Wsk.RemoteHost = SMTP服务器
    Wsk.RemotePort = 25
    Dim a As Boolean
    a = SendMail(Wsk, 你的邮箱, 对方的邮箱, 标题, 内容)
      

  3.   

    更正:
    WSock.SendData "HELO " & "发件人" & vbCrLf
    这句删除
      

  4.   

    好谢谢各位:请问怎样发送身份验证:
    邮:[email protected]
      

  5.   

    上面的代码就可以实现啊!在更正下:
    WSock.SendData "HELO " & "发件人" & vbCrLf
    应该改为
    WSock.SendData "EHLO " & sFrom & vbCrLf
      

  6.   


    上面的代码就可以实现啊!在更正下:
    WSock.SendData "HELO " & "发件人" & vbCrLf
    应该改为
    WSock.SendData "EHLO " & sFrom & vbCrLf?
    上面的代码就可以实现啊!在更正下:
    WSock.SendData "HELO " & "发件人" & vbCrLf
    应该改为
    WSock.SendData "HELO " & sFrom & vbCrLf