Tin học
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Lập trình Visual Basic dùng Winsock kết nối tới mail server

2 posters

Go down

Lập trình Visual Basic dùng Winsock kết nối tới mail server Empty Lập trình Visual Basic dùng Winsock kết nối tới mail server

Bài gửi  ThienThanhI91C 13/4/2010, 12:15

Khi một phần mềm duyệt mail kết nối tới Mail Server, trước tiên nó phải kiểm tra xem mail server này có tồn tại hay không sau đó mới thực hiện tiếp các nhiệm vụ khác. Khi ta dùng Winsock để kết nối tới mail server, trước tiên ta cũng sẽ phải cung cấp cho điều khiển Winsock (Winsock Control) một số tham số đó là tên của mail server (Inccoming mail server - POP3) và cổng kết nối, ở đây ta dùng cổng 110 là cổng của dịch vụ mail. Sau đó ta sẽ lệnh cho Winsock kết nối tới mail server mà ta đã khai báo. Winsock sẽ kiểm tra sự tồn tại của mail server rồi trả kết quả về. Nếu kết quả kiểm tra là có mail server này, ta sẽ lần lượt gửi tên truy cập (username) rồi mật khẩu (password) cho mail server qua điều khiển Winsock (như khi kiểm tra sự tồn tại của mail server). Khi mail server nhận được username và password, nó sẽ kiểm tra xem có username này không, nếu có sẽ kiểm tra tiếp password, nếu không có thì sẽ gửi thông báo lỗi về. Tương tự như vậy, ta sẽ gửi các lệnh để biết số lượng, dung lượng của tất cả các mail hiện có trên server hoặc các lệnh lấy mail về, xoá mail... sau khi mail server đã kiểm tra đúng username và password Ta sẽ lấy các kết quả trả về từ mail server qua phương thức DataArrival của điều khiển Winsock. Qua kết quả này, ta sẽ biết được username, password, và các lệnh khác ta gửi đi có đúng không. Tuỳ thuộc vào phần mềm quản lý mail trên mail server mà sẽ có những câu trả lời khác nhau. Nhưng có một điểm chung là kết qủa gửi về là OK ... nếu lệnh bạn gửi đi đúng và mail server thực hiện thành công lệnh đó, ngược lại kết quả sẽ là -ERR ... (trong đó ... đằng sau OK và -ERR là kết qủa xử lý của lệnh và thông báo lỗi).

Thực hiện:Tạo 1 đề án, vào menu Project/Components, chọn Microsoft Winsock Control 6.0 nhấp Apply rồi Ok, biểu tượng của Winsock sẽ xuất hiện trong Toolbox.
Kéo biểu tượng Winsock vào đề án, có thể đặt lại tên cho Winsock (trong ví dụ, tôi đặt tên cho Winsock là SocketMail). Thiết lập thuộc tính Protocol cho Winsock là sckTCPProtocol.

Tạo 5 TextBox và đặt tên như sau:

txtPOPServer
txtUsername
txtPassword
txtParameter
txtResult (đặt MultiLine = True, ScrollBars = 2)

Tạo một ComboBox, đặt tên cho ComboBox là cmbCmd

Tạo 4 Button và đặt tên như sau:

cmdConnect (đặt Caption = "Connect")
cmdDisconnect (đặt Caption = "Disonnect")
cmdSend (đặt Caption = "Send")
cmdExit (đặt Caption = "Exit")

Tạo 1 Label, đặt tên cho Label là lblStatus, đặt Caption = "Waiting..."
(Bạn hãy tự tạo các Label cho các đối tượng ở trên để không bị nhầm lẫn)

Soạn các đoạn mã lệnh dưới vào các thủ tục tương ứng:

Private Sub cmdConnect_Click()
'Kết nối tới mail server để kiểm tra sự tồn tại của mail server
'txtPOPServer.Text chứa tên mail server, Ví dụ mail VNN là mail.hcm.vnn.vn
SocketMail.Close
SocketMail.RemoteHost = txtPOPServer.Text
SocketMail.RemotePort = 110
SocketMail.Connect
End Sub

Private Sub cmdDisconnect_Click()
'Đóng kết nối
If SocketMail.State = sckConnected Then
SocketMail.SendData "QUIT" & vbCrLf
DoEvents
End If
End Sub

Private Sub cmdExit_Click()
End
End Sub

Private Sub cmdSend_Click()
'Gửi lệnh bạn chọn trong list tới mail server
Call SendCmd(cmbCmd.List(cmbCmd.ListIndex) & " " & Trim(txtParameter.Text))
End Sub

Private Sub Form_Load()
'Add các lệnh vào ComboBox
cmbCmd.AddItem "STAT"
cmbCmd.AddItem "LIST"
cmbCmd.AddItem "RETR"
cmbCmd.AddItem "DELE"
cmbCmd.AddItem "RSET"
cmbCmd.AddItem "NOOP"
cmbCmd.AddItem "QUIT"
End Sub

Private Sub Form_Unload(Cancel As Integer)
'Đóng kết nối trước khi thoát khỏi chương trình
If SocketMail.State = sckConnected Then
SocketMail.SendData "QUIT" & vbCrLf
DoEvents
End If
End Sub

Private Sub SocketMail_Close()
lblStatus.Caption = = "Disconnected"
End Sub

Private Sub SocketMail_Connect()
Dim cmd As String
'Thủ tục này sẽ tự động được thực thi khi quá trình kiểm tra sự tồn tại của mail server
lblStatus.Caption = = "Sending username and password..."
'Lần lượt gửi username và password tới Server
cmd = "USER " & txtUsername.Text & vbCrLf
SocketMail.SendData cmd
DoEvents
cmd = "PASS " & txtPassword.Text & vbCrLf
SocketMail.SendData cmd
DoEvents
lblStatus.Caption = = "Connected"
End Sub

Private Sub SocketMail_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
'Lấy dữ liệu trả về từ mail server
SocketMail.GetData Data
txtResult.Text = txtResult.Text & Data
End Sub

Private Sub SendCmd(cmd As String)
On Error Resume Next
'Thủ tục gửi lệnh tới server
If SocketMail.State = sckConnected Then
SocketMail.SendData cmd & vbCrLf
DoEvents
End If
End Sub

Private Sub SocketMail_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)
'Lấy các thông báo lỗi của điền khiển Winsock.
lblStatus.Caption = = "Error: " & Description
End Sub


Khi chạy chương trình, bạn nhập tên mail server, username và password vào các textbox tương ứng sau đó nhấp vào "Connect". Sau khi đã kết nối thành công, bạn chọn các lệnh trong cmbCmd rồi nhấp vào "Send", nếu lệnh nào có tham số thì bạn phải nhập tham số vào txtParameter trước khi nhấp "Send". Các kết quả trả về sẽ hiển thị trong txtResult.

Một số lệnh và cách thực hiện:

- STAT: Lấy tổng số lượng và dụng lượng của các mail của hộp thư trên mail server.

- LIST n : Kiểm tra dung lượng của mail, trong đó n là số thứ tự của mail muốn kiểm tra.

Nếu không có tham số n đi kèm thì server sẽ gửi lần lượt dung lượng từng mail có trong hộp thư.

Ví dụ: Nếu gửi lệnh LIST 5 thì sẽ nhận kết quả là dung lượng của mail số 5. (nếu trong hộp thư của bạn có từ 5 mail trở lên)

- RETR n: Kiểm tra header và nội dung của mail, trong đó n là số thứ tự của mail muốn kiểm tra.

- DELE n: Xóa mail, trong đó n là số thứ tự của mail muốn xóa. Sau khi gửi lệnh DELE, server sẽ đánh dấu xóa mail chứ chưa xóa hẳn, muốn xóa hẳn ta phải dùng lệnh RSET sau đó. Có thể đánh dấu xóa nhiều mail rồi sau đó mới gửi 1 lệnh RSET.

- NOOP: Kiểm tra xem còn kết nối với server không.

- QUIT: Ngắt kết nối với server.

Lưu ý: Các lệnh trên phải dùng chữ in hoa.

Một số thông báo trả về của các phầm mềm quản lý mail trên mail server khi ta gửi username và passord

Thànhh công:
OK logon successfull
OK User successfully logged on
OK Maildrop ready

Không thành công:
-ERR Logon failure: unknown user name or bad password
-ERR unable to logon

ThienThanhI91C

Tổng số bài gửi : 15
Join date : 18/03/2010

Về Đầu Trang Go down

Lập trình Visual Basic dùng Winsock kết nối tới mail server Empty Re: Lập trình Visual Basic dùng Winsock kết nối tới mail server

Bài gửi  tri_09h1010091 13/4/2010, 15:25

Sao không viết bằng C# ,tụi mình đang học C# mà.

tri_09h1010091

Tổng số bài gửi : 37
Join date : 30/03/2010
Age : 39
Đến từ : Quảng Ngãi

Về Đầu Trang Go down

Lập trình Visual Basic dùng Winsock kết nối tới mail server Empty Re: Lập trình Visual Basic dùng Winsock kết nối tới mail server

Bài gửi  ThienThanhI91C 13/4/2010, 23:12

tri_09h1010091 đã viết:Sao không viết bằng C# ,tụi mình đang học C# mà.
hì hì thì mình chuyển cũng code được mà bạn!vẻ lại tham khảo thôi! vẻ lại tại thấy thầy viết trên VB6.0 nên Thanh post C trên VB 6.0 lên luôn

ThienThanhI91C

Tổng số bài gửi : 15
Join date : 18/03/2010

Về Đầu Trang Go down

Lập trình Visual Basic dùng Winsock kết nối tới mail server Empty Re: Lập trình Visual Basic dùng Winsock kết nối tới mail server

Bài gửi  Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết