200分求教高手帮助修改邮件发送程序,谢谢!!!以下代码能发送简单邮件(不能发送大的邮件,即hh.txt文件不能太大(200k以上)),求教高手帮助修改一下程序,已能发送大的邮件(原则上不限制邮件大小(几十到一百兆)都可,谢谢!!!
来信,我可将程序发送给您
[email protected]:
Label1.Caption ; 发件人 对应 ; text4
Label2.Caption ; 收件人 对应 ; text1
Label5.Caption ; SMTP 对应 ; text5
Label3.Caption ; 用户名 对应 ; text2
Label4.Caption ; 密码 对应 ; text3
Command1.Caption;发送邮件
FORM2:
FORM2.Caption 发送邮件
Label1.Caption ; StatusTxt代码:
FORM1:
Private Sub Command1_Click()
Load 发送邮件
End Sub
FORM2:
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 EnumPrivate m_State As SMTP_StatePrivate Sub Form_Load()
Me.Show
FailDatum
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strServerResponse As String
Dim xjnr
Dim llen As Long
Dim mbyte() As Byte
Dim strResponseCode As String
Dim strDataToSend() As String '
Dim strDataToSendend As Long
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
Select Case m_State
Case MAIL_CONNECT
m_State = MAIL_HELO
Winsock1.SendData "HELO " & Form1.Text4 & vbCrLf
StatusTxt = "登陆服务器"
Winsock1.GetData strServerResponse
If Left(strServerResponse, 3) <> "220" Then
Winsock1.Close
Unload Me
MsgBox "无法登陆服务器"
End If
Case MAIL_HELO
m_State = MAIL_USER
Winsock1.SendData "AUTH LOGIN" & vbCrLf
StatusTxt = "正在校验用户名"
Winsock1.GetData strServerResponse
If Left(strServerResponse, 3) <> "250" Then
Winsock1.Close
Unload Me
MsgBox "无法打开邮件发送对话"
End If
Case MAIL_USER
m_State = MAIL_PASS
Winsock1.SendData (Base64_Encode(Form1.Text2)) & vbCrLf
StatusTxt = "校验用户密码"
Winsock1.GetData strServerResponse
Case MAIL_PASS
m_State = mail_login
Winsock1.SendData (Base64_Encode(Form1.Text3)) & vbCrLf
StatusTxt = "发送人邮件地址"
Winsock1.GetData strServerResponse
Case mail_login
Winsock1.GetData strServerResponse
m_State = MAIL_from
Winsock1.SendData "MAIL FROM:" & Trim$(Form1.Text4) & vbCrLf
StatusTxt = "接收人邮件地址"
Case MAIL_from
m_State = MAIL_RCPTTO
Winsock1.SendData "RCPT TO:" & Trim$(Form1.Text1) & vbCrLf
StatusTxt = "邮件发送之中..."
Winsock1.GetData strServerResponse
Case MAIL_RCPTTO
m_State = MAIL_DATA
Winsock1.SendData "DATA" & vbCrLf
StatusTxt = "获取邮件内容"
Winsock1.GetData strServerResponse
Case MAIL_DATA
m_State = MAIL_DOT
Winsock1.SendData "From:" & " <" & Form1.Text4 & ">" & vbCrLf
Winsock1.SendData "To:" & " <" & Form1.Text1 & ">" & vbCrLf
llen = FileLen(App.Path + "\hh1.txt")
ReDim mbyte(llen - 1)
Open App.Path & "\hh1.txt" For Binary Access Read As #1
Get #1, , mbyte
xjnr = StrConv(mbyte, vbUnicode)
strContent = xjnr
Close #1
strDataToSend = Split(strContent, vbCrLf)
strDataToSendend = UBound(strDataToSend)
For i = 0 To strDataToSendend
Winsock1.SendData strDataToSend(i) & vbCrLf
Next i
Winsock1.SendData "." & vbCrLf
StatusTxt = "邮件送完毕"
Winsock1.GetData strServerResponse
Case MAIL_DOT
m_State = MAIL_QUIT
Winsock1.SendData "QUIT" & vbCrLf
Case MAIL_QUIT
Winsock1.Close
Unload Form1
Unload Me
End Select
Debug.Print strServerResponse
End Sub
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Winsock1.Close
MsgBox "出现错误,请您检查网络连接或网络设置!!!"
DoEvents
End SubPrivate Function Base64_Encode(strSource) As String 'base6加密算法
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 FunctionSub FailDatum()
Dim SMTPPortport As Integer
Winsock1.Close
Winsock1.LocalPort = 0
strserver = Form1.Text5
SMTPPortport = "25"
Winsock1.Connect strserver, SMTPPortport
m_State = MAIL_CONNECT '
End Sub
来信,我可将程序发送给您
[email protected]:
Label1.Caption ; 发件人 对应 ; text4
Label2.Caption ; 收件人 对应 ; text1
Label5.Caption ; SMTP 对应 ; text5
Label3.Caption ; 用户名 对应 ; text2
Label4.Caption ; 密码 对应 ; text3
Command1.Caption;发送邮件
FORM2:
FORM2.Caption 发送邮件
Label1.Caption ; StatusTxt代码:
FORM1:
Private Sub Command1_Click()
Load 发送邮件
End Sub
FORM2:
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 EnumPrivate m_State As SMTP_StatePrivate Sub Form_Load()
Me.Show
FailDatum
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strServerResponse As String
Dim xjnr
Dim llen As Long
Dim mbyte() As Byte
Dim strResponseCode As String
Dim strDataToSend() As String '
Dim strDataToSendend As Long
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
Select Case m_State
Case MAIL_CONNECT
m_State = MAIL_HELO
Winsock1.SendData "HELO " & Form1.Text4 & vbCrLf
StatusTxt = "登陆服务器"
Winsock1.GetData strServerResponse
If Left(strServerResponse, 3) <> "220" Then
Winsock1.Close
Unload Me
MsgBox "无法登陆服务器"
End If
Case MAIL_HELO
m_State = MAIL_USER
Winsock1.SendData "AUTH LOGIN" & vbCrLf
StatusTxt = "正在校验用户名"
Winsock1.GetData strServerResponse
If Left(strServerResponse, 3) <> "250" Then
Winsock1.Close
Unload Me
MsgBox "无法打开邮件发送对话"
End If
Case MAIL_USER
m_State = MAIL_PASS
Winsock1.SendData (Base64_Encode(Form1.Text2)) & vbCrLf
StatusTxt = "校验用户密码"
Winsock1.GetData strServerResponse
Case MAIL_PASS
m_State = mail_login
Winsock1.SendData (Base64_Encode(Form1.Text3)) & vbCrLf
StatusTxt = "发送人邮件地址"
Winsock1.GetData strServerResponse
Case mail_login
Winsock1.GetData strServerResponse
m_State = MAIL_from
Winsock1.SendData "MAIL FROM:" & Trim$(Form1.Text4) & vbCrLf
StatusTxt = "接收人邮件地址"
Case MAIL_from
m_State = MAIL_RCPTTO
Winsock1.SendData "RCPT TO:" & Trim$(Form1.Text1) & vbCrLf
StatusTxt = "邮件发送之中..."
Winsock1.GetData strServerResponse
Case MAIL_RCPTTO
m_State = MAIL_DATA
Winsock1.SendData "DATA" & vbCrLf
StatusTxt = "获取邮件内容"
Winsock1.GetData strServerResponse
Case MAIL_DATA
m_State = MAIL_DOT
Winsock1.SendData "From:" & " <" & Form1.Text4 & ">" & vbCrLf
Winsock1.SendData "To:" & " <" & Form1.Text1 & ">" & vbCrLf
llen = FileLen(App.Path + "\hh1.txt")
ReDim mbyte(llen - 1)
Open App.Path & "\hh1.txt" For Binary Access Read As #1
Get #1, , mbyte
xjnr = StrConv(mbyte, vbUnicode)
strContent = xjnr
Close #1
strDataToSend = Split(strContent, vbCrLf)
strDataToSendend = UBound(strDataToSend)
For i = 0 To strDataToSendend
Winsock1.SendData strDataToSend(i) & vbCrLf
Next i
Winsock1.SendData "." & vbCrLf
StatusTxt = "邮件送完毕"
Winsock1.GetData strServerResponse
Case MAIL_DOT
m_State = MAIL_QUIT
Winsock1.SendData "QUIT" & vbCrLf
Case MAIL_QUIT
Winsock1.Close
Unload Form1
Unload Me
End Select
Debug.Print strServerResponse
End Sub
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Winsock1.Close
MsgBox "出现错误,请您检查网络连接或网络设置!!!"
DoEvents
End SubPrivate Function Base64_Encode(strSource) As String 'base6加密算法
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 FunctionSub FailDatum()
Dim SMTPPortport As Integer
Winsock1.Close
Winsock1.LocalPort = 0
strserver = Form1.Text5
SMTPPortport = "25"
Winsock1.Connect strserver, SMTPPortport
m_State = MAIL_CONNECT '
End Sub
请高手帮助看看,谢谢!!!!
发邮件时,已接收到354 Start mail input; end with <CRLF>.<CRLF>,发邮件内容时为何会出现“错误40006,所请求的事务或请求本身的错误协议或者错误连接状态“
或错误:“错误10053“请您予以帮助,谢谢!!!
>http://free.efile.com.cn/huangtao/ScreenShot.jpg
>
>setup download url:
>http://free.efile.com.cn/huangtao/SmartmailSource.rar 兄弟,没必要写!没有多大钱途,我都免费