經常在論壇看到網友提問如何發送電子郵件(SMTP服務器認證),其實只要知道客戶端與郵件服務器之間會話,用戶
名和密碼是通過base64編碼加密后傳送,問題就很容易被解決.協議使用方面和smtp協議使用是一模一樣的,值得
注意的就是esmtp協議在用戶名和密碼驗證時,服務器返回一個354的消息代號.本代碼沒有針對錯誤提示信息處理,
但保證能正常發送郵件,大家可以自己完善它,本代碼還使用IME編碼,這樣就可以發送超文本電子郵件了。用過
Foxmail4.1朋友應該知道,它實現的圖文并茂聲音郵件是它的一個亮點。本代碼同樣可以實現超文本郵件,要發
送mid做為背景音東的郵件,只要對ime代碼部分稍加修改就可以實現,歌曲也須用base64編碼后發送。目前流行
郵件病毒的原理和此一樣,通過IE在IME中的漏洞實現,解決方法可以在注冊表中刪除IME編碼格式,或者安裝Winamp
同樣也可以解決它(需做的只要在winamp支持的文件格式全選上),怎么越講越跑題了,大家不要向我扔臭雞蛋呀,
hehe,我也不多廢話了,下附本軟件所有代碼.全整代碼也可以在我的個人主頁上下載,歡迎各位VB愛好與我聯系,交
流編程技術.
主頁:http://www.dapha.net
Msn:dapha@msn.com
VERSION 5.00
Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"
Begin VB.Form Form1
BorderStyle = 1 'Fixed Single
Caption = "郵件發送程序(支持smtp服務器驗證)"
ClientHeight = 5550
ClientLeft = 45
ClientTop = 330
ClientWidth = 5805
LinkTopic = "Form1"
MaxButton = 0 'False
ScaleHeight = 5550
ScaleWidth = 5805
StartUpPosition = 3 'Windows Default
Begin MSWinsockLib.Winsock Winsock1
Left = 2640
Top = 2520
_ExtentX = 741
_ExtentY = 741
End
Begin VB.TextBox txtmessage1
Height = 1695
Left = 0
MultiLine = -1 'True
TabIndex = 16
ToolTipText = "這里為超文本信件內容"
Top = 3480
Width = 5775
End
Begin VB.TextBox user
Height = 270
Left = 3960
TabIndex = 15
Top = 840
Width = 1575
End
Begin VB.TextBox subject
Height = 270
Left = 960
TabIndex = 12
Text = "你好"
Top = 1320
Width = 2295
End
Begin VB.TextBox txtserver
Height = 270
Left = 960
TabIndex = 9
Text = "smtp.21cn.com"
Top = 960
Width = 2295
End
Begin VB.TextBox txtpwa
Height = 270
IMEMode = 3 'DISABLE
Left = 3960
MaxLength = 8
PasswordChar = "*"
TabIndex = 7
Top = 1200
Width = 1575
End
Begin VB.TextBox getaddress
Height = 300
Left = 960
TabIndex = 5
Top = 600
Width = 2295
End
Begin VB.TextBox txtfrom
Height = 300
Left = 960
TabIndex = 3
Top = 240
Width = 2295
End
Begin VB.CommandButton cmdExit
Caption = "退出"
Height = 375
Left = 4680
TabIndex = 2
Top = 240
Width = 975
End
Begin VB.CommandButton CmdSend
Caption = "發送"
Height = 375
Left = 3360
TabIndex = 1
Top = 240
Width = 975
End
Begin VB.TextBox txtMessage
Height = 1815
Left = 0
MultiLine = -1 'True
TabIndex = 0
ToolTipText = "信件內容"
Top = 1680
Width = 5775
End
Begin VB.Label Label6
AutoSize = -1 'True
Caption = "用戶名"
Height = 180
Left = 3360
TabIndex = 14
Top = 840
Width = 540
End
Begin VB.Label StatusTxt
AutoSize = -1 'True
BackStyle = 0 'Transparent
BorderStyle = 1 'Fixed Single
Height = 285
Left = 960
TabIndex = 13
Top = 5200
Width = 3375
End
Begin VB.Label Label5
AutoSize = -1 'True
Caption = "主題:"
Height = 180
Left = 240
TabIndex = 11
Top = 1320
Width = 450
End
Begin VB.Label Label4
AutoSize = -1 'True
Caption = "SMTP服務器"
Height = 180
Left = 0
TabIndex = 10
Top = 960
Width = 900
End
Begin VB.Label Label3
AutoSize = -1 'True
Caption = "密碼"
Height = 180
Left = 3360
TabIndex = 8
Top = 1200
Width = 360
End
Begin VB.Label Label2
AutoSize = -1 'True
Caption = "收信人地址"
Height = 180
Left = 0
TabIndex = 6
Top = 600
Width = 900
End
Begin VB.Label Label1
AutoSize = -1 'True
Caption = "發信人地址"
Height = 180
Left = 0
TabIndex = 4
Top = 240
Width = 900
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'程序組合:dapha(汪鋒)
'下載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 '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 Function
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub CmdSend_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 = "試圖與服務器連接"
End Sub
Private 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$(txtfrom)
'strDataToSend = Left$(strDataToSend, _
InStr(1, strDataToSend, "@") - 1)
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(Trim(user.Text))) & vbCrLf
StatusTxt = "校驗用戶密碼"
Case MAIL_PASS
m_State = mail_login
Winsock1.SendData (Base64_Encode(txtpwa)) & vbCrLf
StatusTxt = "發送人郵件地址"
Case mail_login
m_State = MAIL_from
Winsock1.SendData "MAIL FROM:" & Trim$(txtfrom) & vbCrLf
StatusTxt = "接收人郵件地址"
Case MAIL_from
m_State = MAIL_RCPTTO
Winsock1.SendData "RCPT TO:" & Trim$(getaddress) & vbCrLf
StatusTxt = "郵件發送之中..."
Case MAIL_RCPTTO
m_State = MAIL_DATA
Winsock1.SendData "DATA" & vbCrLf
StatusTxt = "獲取郵件內容"
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 = "郵件送完畢"
Case MAIL_DOT
m_State = MAIL_QUIT
Winsock1.SendData "QUIT" & vbCrLf
StatusTxt = "郵件成功發送!!!"
Case MAIL_QUIT
Winsock1.Close
StatusTxt = "待命之中..."
End Select
Else
Winsock1.Close
End If
Debug.Print strServerResponse
End Sub
全文完...
文章來源于領測軟件測試網 http://www.kjueaiud.com/
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月