最近发现JMail居然没有for VB的例子,本来想用C#写一个的,可是家里的电脑只有一个VB,好的程序员是不能受制于开发工具的(虽然我并不是个程序员)。
花了一个晚上,面对着RFC0821和Ethereal的截包结果,功夫不负有心人,终于有一个简单的例子可以和大家共享了,希望大家讨论一下。(格式不怎么好,许多异常也没处理,另外VB的语法已经忘得差不多了,请大家谅解!)
项目包括两个文件
1 main.frm
VERSION 5.00 Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX" Begin VB.Form Form1 Caption = "Form1" ClientHeight = 4725 ClientLeft = 60 ClientTop = 345 ClientWidth = 5550 LinkTopic = "Form1" ScaleHeight = 4725 ScaleWidth = 5550 StartUpPosition = 3 ''''Windows Default Begin MSWinsockLib.Winsock smtpClient Left = 1680 Top = 120 _ExtentX = 741 _ExtentY = 741 _Version = 393216 RemoteHost = "mail.domain.com" RemotePort = 25 End Begin VB.CommandButton Command2 Caption = "Connect" Height = 495 Left = 120 TabIndex = 3 Top = 120 Width = 1215 End Begin VB.CommandButton Command1 Caption = "Send" Height = 375 Left = 4560 TabIndex = 2 Top = 4200 Width = 855 End Begin VB.TextBox Text2 Height = 315 Left = 120 TabIndex = 1 Top = 4200 Width = 4215 End Begin VB.TextBox Text1 Height = 3255 Left = 120 MultiLine = -1 ''''True ScrollBars = 2 ''''Vertical TabIndex = 0 Top = 840 Width = 5295 End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Private state As Integer Private FLAG_LINE_END As String Private FLAG_MAIL_END As String
Private Sub Command1_Click() Text2.Text = base64encode(utf16to8(Text2.Text)) ''''Text2.Text = base64decode(utf8to16(Text2.Text)) End Sub
Private Sub Command2_Click() state = 0 smtpClient.Close smtpClient.Connect End Sub
Private Sub Form_Load() mailcount = 2 FLAG_LINE_END = Chr(13) + Chr(10) FLAG_MAIL_END = FLAG_LINE_END + "." + FLAG_LINE_END End Sub
Private Sub Form_Terminate() smtpClient.Close End Sub
Private Sub smtpClient_Close() ''''MsgBox "closed!" state = 0 End Sub
Private Sub smtpClient_DataArrival(ByVal bytesTotal As Long) Dim s As String smtpClient.GetData s Text1.Text = Text1.Text + s + FLAG_LINE_END Dim msgHead As String msgHead = Left(s, 3) Dim msgBody As String msgBody = Mid(s, 5) Dim msgType As Integer msgType = CInt(msgHead) Dim msgsend As String Select Case state Case 0 ''''start state Select Case msgType Case 220 msgsend = "EHLO yourname" + FLAG_LINE_END smtpClient.SendData msgsend Text1.Text = Text1.Text + msgsend + FLAG_LINE_END state = 1 Case 421 ''''Service not available End Select Case 1 ''''EHLO Select Case msgType Case 250 msgsend = "AUTH LOGIN" + FLAG_LINE_END smtpClient.SendData msgsend Text1.Text = Text1.Text + msgsend + FLAG_LINE_END state = 2 Case 500, 501, 504, 421 ''''error happened End Select Case 2 ''''AUTH LOGIN Select Case msgType Case 334 If msgBody = "VXNlcm5hbWU6" + FLAG_LINE_END Then msgsend = base64encode(utf16to8("username")) + FLAG_LINE_END smtpClient.SendData msgsend Text1.Text = Text1.Text + msgsend + FLAG_LINE_END ElseIf msgBody = "UGFzc3dvcmQ6" + FLAG_LINE_END Then msgsend = base64encode(utf16to8("password")) + FLAG_LINE_END smtpClient.SendData msgsend Text1.Text = Text1.Text + msgsend + FLAG_LINE_END End If Case 235 ''''correct SetFrom "you@domain.com" state = 3 Case 535 ''''incorrect Quit &nb [1] [2] [3] 下一页 [C语言系列]Socket 编程,一个服务器,多个客户端,互相通信 [常用软件]微软最新VoIP服务器及客户端软件下周开测 [常用软件]uTorrent:史上最省资源BT客户端试用 [常用软件]越看越流畅三款主流网络电视客户端导购 [常用软件]Allpeers:让Firefox摇身一变为P2P客户端 [常用软件]编译给自己专用的FTP客户端 [常用软件][网络]FTPRush FTP客户端 软件评测 [VB.NET程序]WinVista新技术 WCF开发指南之客户端开发 [VB.NET程序]建立同SAS交互的开发式VB客户端 [Web开发]利用JS获取IE客户端IP及MAC的实现
|