用winsock,通过SMTP命令集进行邮件发送。

解决方案 »

  1.   

    在程序里用邮件转发服务器的smtp地址(此地址可以做成ini自由配置),每次发信都发到转发服务器上,由他来帮你发送这样从界面上看,就没有smtp配置部分了
      

  2.   

    用aspmail等第三方控件,就可以了。至于不要配置smtp,是指什么意思?aspmail中的函数sendmail中有个参数需要指定smtp server
      

  3.   

    我知道需要smtp server的,但是我发送email的是,指定一个smtp server,就好象是上海热线的油箱:smtp.citiz.net
    但是被它拒绝了,不知道为什么呢?
    我看了一些资料说,很多smtp服务器,现在都不为非会员做转发email的,但是我就觉得奇怪,那么我的outlook它发信,我设置的也是smtp.citiz.net,它怎么能发送成功呢?
    这是什么问题,2。我曾经看到过一个程序,它只需要你填写收信人的地址,不用任何设置,就可以发信了,这是怎么做到的
      

  4.   

    你需要身份验证的,要不很少有邮件服务器给你发。
    Private Enum SMTP_State
        MAIL_CONNECT
        MAIL_HELO
        MAIL_from
        MAIL_RCPTTO
        MAIL_DATA
        MAIL_DOT
        MAIL_QUIT
        MAIL_USER
        MAIL_PASS
        mail_login
    End Enum
    Private m_State As SMTP_State
    Private m_strEncodedFiles As String
    Private Function Base64_Encode(strSource) As String 'base64シモテワヒ羚ィ
        Const BASE64_TABLE As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
        Dim strTempLine As String
        Dim j As Integer
        For j = 1 To (Len(strSource) - Len(strSource) Mod 3) Step 3
            strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) \ 4) + 1, 1)
            strTempLine = strTempLine + Mid(BASE64_TABLE, ((Asc(Mid(strSource, j, 1)) Mod 4) * 16 _
                          + Asc(Mid(strSource, j + 1, 1)) \ 16) + 1, 1)
            strTempLine = strTempLine + Mid(BASE64_TABLE, ((Asc(Mid(strSource, j + 1, 1)) Mod 16) * 4 _
                          + Asc(Mid(strSource, j + 2, 1)) \ 64) + 1, 1)
            strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j + 2, 1)) Mod 64) + 1, 1)
        Next j
        If Not (Len(strSource) Mod 3) = 0 Then
             If (Len(strSource) Mod 3) = 2 Then
                strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) \ 4) + 1, 1)
                strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) Mod 4) * 16 _
                          + Asc(Mid(strSource, j + 1, 1)) \ 16 + 1, 1)
                 strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j + 1, 1)) Mod 16) * 4 + 1, 1)
                strTempLine = strTempLine & "="
            ElseIf (Len(strSource) Mod 3) = 1 Then
                strTempLine = strTempLine + Mid(BASE64_TABLE, Asc(Mid(strSource, j, 1)) \ 4 + 1, 1)
                strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) Mod 4) * 16 + 1, 1)
                 strTempLine = strTempLine & "=="
            End If
         End If
        Base64_Encode = strTempLine
    End Function
    Private Sub cmdExit_Click()
    Unload Me
    End Sub
    Private Sub CmdSend1_Click()
        Winsock1.Close
        Winsock1.LocalPort = 0
        strserver = txtserver
        ColonPos = InStr(strserver, ":")
        If ColonPos = 0 Then
            Winsock1.Connect strserver, 25
        Else
            lngPort = CLng(Right$(strserver, Len(strserver) - ColonPos))
            strserver = Left$(strserver, ColonPos - 1)
            Winsock1.Connect strserver, lngPort
        End If
        m_State = MAIL_CONNECT    '
        StatusTxt = "Try to connect"
    End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
        Dim strServerResponse   As String
        Dim strResponseCode     As String
        Dim strDataToSend       As String    '
        Const RandString As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"
        Dim Globalstr As String
        For jd = 1 To 24
            uniquey = Int(Rnd * Len(RandString)) + 1
            Globalstr = Globalstr + Mid(RandString, uniquey, 1)
        Next jd
        strime1 = "Subject:" + Chr(32) + subject + vbCrLf ' Subject of E-Mail
        strime = txtMessage + vbCrLf ' E-mail message body
        strime2 = "X-Mailer:VVV:モハシキ「ヒヘネ晴V1.0" + vbCrLf ' What program sent the e-mail, customize this
        'MULTI-PART Edit
        strime = "------=_NextPart_" + Globalstr + vbCrLf + "Content-type: text/plain; charset=gb2312" + vbCrLf + vbCrLf + strime
        strime = strime + "------=_NextPart_" + Globalstr + vbCrLf + "Content-type: text/HTML" + vbCrLf + vbCrLf + txtmessage1 + vbCrLf + vbCrLf
        strime = strime + "------=_NextPart_" + Globalstr + "--" + vbCrLf
        strime1 = strime1 + "MIME-Version: 1.0" + vbCrLf + "Content-Type: multipart/alternative; " + vbCrLf + Chr(9) + "boundary=""----=_NextPart_" + Globalstr + """" + vbCrLf + vbCrLf + "This mail is In MIME format. Your mail interface does Not appear To support this format." + vbCrLf + vbCrLf
        strimeall = strime2 + strime1
        Winsock1.GetData strServerResponse
        strResponseCode = Left(strServerResponse, 3)
        If strResponseCode = "250" Or _
           strResponseCode = "220" Or _
           strResponseCode = "354" Or _
           strResponseCode = "334" Or _
           strResponseCode = "235" Then
            Select Case m_State
                Case MAIL_CONNECT
                    m_State = MAIL_HELO
                    strDataToSend = Trim$(txtfrom)
                    'strDataToSend = Left$(strDataToSend, _
                                    InStr(1, strDataToSend, "@") - 1)
                     Winsock1.SendData "HELO " & strDataToSend & vbCrLf
                     StatusTxt = "logging in"
                Case MAIL_HELO
                     m_State = MAIL_USER
                     Winsock1.SendData "AUTH LOGIN" & vbCrLf
                     StatusTxt = "check user"
                Case MAIL_USER
                     m_State = MAIL_PASS
                     Winsock1.SendData (Base64_Encode(Trim(user.Text))) & vbCrLf
                     StatusTxt = "check password"
                Case MAIL_PASS
                     m_State = mail_login
                     Winsock1.SendData (Base64_Encode(txtpwa)) & vbCrLf
                     StatusTxt = "from "
                Case mail_login
                     m_State = MAIL_from
                     Winsock1.SendData "MAIL FROM:" & Trim$(txtfrom) & vbCrLf
                     StatusTxt = "to"
                Case MAIL_from
                     m_State = MAIL_RCPTTO
                     Winsock1.SendData "RCPT TO:" & Trim$(getaddress) & vbCrLf
                     StatusTxt = "sending..."
                Case MAIL_RCPTTO
                     m_State = MAIL_DATA
                     Winsock1.SendData "DATA" & vbCrLf
                     StatusTxt = "get data"
                Case MAIL_DATA
                    m_State = MAIL_DOT
                    Winsock1.SendData "From:" & user.Text & " <" & txtfrom & ">" & vbCrLf
                    Winsock1.SendData "To:" & toname & " <" & getaddress & ">" & vbCrLf
                    Winsock1.SendData strimeall & vbCrLf
                    Winsock1.SendData strime & vbCrLf
                    Winsock1.SendData "." & vbCrLf
                    StatusTxt = "over"
                Case MAIL_DOT
                    m_State = MAIL_QUIT
                    Winsock1.SendData "QUIT" & vbCrLf
                    StatusTxt = "succeed!!!"
                  Case MAIL_QUIT
                     Winsock1.Close
                     StatusTxt = "&#65396;&#63729;&#65411;&#12539;&#65390;&#65430;&#65424;..."
             End Select
        Else
             Winsock1.Close
        End If
    Debug.Print strServerResponse
    End Sub
      

  5.   

    兄弟,你还在忙啊!
    我帮你看 了一下上面的代码,基本没什么问题,
    至于格式,他写个是mime格式的问题,实在不行的话,你把它改成非mime格式,这样应该没什么的
    如果你实在不行的话,留个email给我,我发个例子给你,是一个dll文件,我前一段时间刚做的
      

  6.   

    噢,是吗,那么 你帮 我 发一个过来吧,谢谢了[email protected],com,cn
      

  7.   

    不好意思,写错了 ,
    [email protected]
      

  8.   

    to: litsnake1(litsnake)
    能否发个给在下,谢谢您!!!
    [email protected]