Dim state As Boolean
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 StringPublic Sub Send() '邮件发送
Winsock1.Close
Winsock1.LocalPort = 0
strserver = "smtp.163.com"
lngPort = 25
Winsock1.Connect strserver, lngPort
m_State = MAIL_CONNECT '
StatusTxt = "试图与服务器连接"
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:程序太平洋:邮件发送软件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$("很远的地方") '显示从那里来的
Winsock1.SendData "HELO " & strDataToSend & vbCrLf
StatusTxt = "登陆服务器"
Case MAIL_HELO
m_State = MAIL_USER
Winsock1.SendData "AUTH LOGIN" & vbCrLf
StatusTxt = "正在校验用户名"
Case MAIL_USER
m_State = MAIL_PASS
Winsock1.SendData (Base64_Encode(user)) & vbCrLf '用户名
StatusTxt = "校验用户密码"
Case MAIL_PASS
m_State = mail_login
Winsock1.SendData (Base64_Encode(pwd)) & vbCrLf '密码
StatusTxt = "发送人邮件地址"
Case mail_login
m_State = MAIL_from
Winsock1.SendData "MAIL FROM:很远的地方" & vbCrLf '显示从那里来的
StatusTxt = "接收人邮件地址"
Case MAIL_from
m_State = MAIL_RCPTTO
Winsock1.SendData "RCPT TO:" & address & vbCrLf '发送的目的地
StatusTxt = "邮件发送之中..."
Case MAIL_RCPTTO
m_State = MAIL_DATA
Winsock1.SendData "DATA" & vbCrLf
StatusTxt = "获取邮件内容"
Case MAIL_DATA
m_State = MAIL_DOT
Winsock1.SendData "From:bob<zxb>" & vbCrLf
Winsock1.SendData "To:xiaoqiang <xiaoqiang>" & vbCrLf
Winsock1.SendData strimeall & vbCrLf
Winsock1.SendData strime & vbCrLf
Winsock1.SendData "." & vbCrLf
StatusTxt = "邮件送完毕"
Case MAIL_DOT
m_State = MAIL_QUIT
Winsock1.SendData "QUIT" & vbCrLf
StatusTxt = "邮件成功发送!!!"
MsgBox "asd"
Case MAIL_QUIT
Winsock1.Close
StatusTxt = "待命之中..."
End Select
Else
Winsock1.Close
End If
Debug.Print strServerResponse
End Sub
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货