Gửi email thông báo lỗi cho lập trình viên  
 

(Post 04/04/2008) Trong số báo TGVT A tháng 3/2007 có câu hỏi về vấn đề gửi thông báo lỗi chương trình viết bằng VB6 qua email. Thực ra vấn đề đó hoàn toàn có thể thực hiện được để giúp người dùng cuối khỏi tốn công cắt màn hình.

Yếu tố đầu tiên cần giải quyết là bẫy lỗi run-time trong chương trình. VB đã có các cấu trúc On Error ... để làm việc này. Tuy nhiên, VB6 không thể bẫy hết các lỗi run-time và TGVT đã chỉ ra rằng "Nếu lỗi run-time nào dẫn đến việc hiển thị thông báo lỗi thì đa số thông báo lỗi là do đoạn code của thư viện hay của Windows báo, chứ không phải đoạn code của bạn viết nên bạn không thể thay đổi hành vi báo lỗi đó”. Nhưng điều đó không có nghĩa là chúng ta bó tay với những lỗi GPF (General Protection Fault). Ít nhất thì việc bẫy các lỗi GPF để đóng chương trình một cách "êm dịu" cũng đỡ làm người dùng bực mình và lập trình viên đỡ mất mặt. Việc này đã được nhiều người thực hiện bằng cách sử dụng hàm API SetUnhandledExceptionFilter cùng với hàm API CopyMemory để lấy cấu trúc EXCEPTION_RECORD (cách làm được công bố lần đầu tiên trên tạp chí Visual Basic Programmers Journal số tháng 5/1999). Nếu tìm hiểu sâu hơn, chúng ta biết rằng thực ra các lỗi như "Division by zero" là do VB đã xử lý EXCEPTION_INT_DIVIDE_BY_ZERO của Windows và chuyển nó thành trappable error của mình. Với các trường hợp như EXCEPTION_ACCESS_VIOLATION thì VB không làm gì mà chuyển cho bộ xử lý lỗi của Windows (default exception handler) để nó đưa ra thông báo lỗi "illegal operation" (và đôi khi còn gọi cả Dr. Watson – người bạn nổi tiếng của thám tử Sherlock Holmes – để ghi lại các dấu vết). Để không mất thời gian của các bạn, tôi xin giới thiệu một địa chỉ có thể tải xuống chương trình nguồn hoàn toàn miễn phí (thậm chí không cần đăng ký), nhấn vào đây để tải xuống.

Ghi chú: Ngoài việc đưa ra thông báo lỗi như trong chương trình mẫu trên, các bạn có thể sáng tạo thêm như in giá trị các biến của chương trình, các công việc vừa thực hiện trước khi sinh lỗi, các thông tin về môi trường thực thi (bộ nhớ, phiên bản của các thư viện, ...) nhưng điều đó nằm ngoài phạm vi của bài viết này.

Yếu tố thứ hai cần giải quyết là tự động gửi email cũng khá đơn giản, tôi chỉ xin điểm qua một vài cách làm:

1. Cách thứ nhất gọi Outlook (đơn giản nhất cho người lập trình): chọn thực đơn Project|References và đánh dấu vào mục Microsoft Outlook X.X Object Library rồi viết code theo ví dụ sau:

Private Sub Form_Load()

Dim objOutlookApp As Outlook.Application
Dim objNameSpace As Outlook.NameSpace
Dim objMail As Outlook.MailItem

Set objOutlookApp = Outlook.Application
Set objNameSpace = objOutlookApp.GetNamespace("MAPI")
objNameSpace.Logon
Set objMail = objOutlookApp.CreateItem(olMailItem)
With objMail

.Subject = "Message Sent from Visual Basic"
.Body = "This message was created by automating Outlook!"
.Send

End With

objNameSpace.Logoff
Set objMail = Nothing
Set objNameSpace = Nothing
Set objOutlookApp = Nothing

End Sub

2. Cách thứ hai dùng MAPI control: chọn thực đơn Project|Components ... và đánh dấu vào mục Microsoft MAPI controls 6.0 rồi... tham khảo ví dụ trong MSDN.!

3. Cách thứ ba dùng thư viện vbSendMail.dll (tải xuống từ địa chỉ này, trong đó đã bao gồm hai chương trình mẫu và tài liệu chi tiết).

Nguyễn Anh Tuấn
(theo PC World VN)


 
 

 
     
 
Công nghệ khác:


101 phần mềm rẻ mà hay - phần 2101 phần mềm rẻ mà hay - phần 1
Để hệ thống mạng tốt hơn10 download miến phí hữu ích cho mạng của bạn - phần 2
10 download miến phí hữu ích cho mạng của bạn - phần 1Chuyển trang ASP.NET sang Ajax với MagicAjax.NET
  Xem tiếp    
 
Lịch khai giảng của hệ thống
 
Ngày
Giờ
T.Tâm
TP Hồ Chí Minh
Hà Nội
 
   
New ADSE - Nhấn vào để xem chi tiết
Mừng Sinh Nhật Lần Thứ 20 FPT-APTECH
Nhấn vào để xem chi tiết
Bảng Vàng Thành Tích Sinh Viên FPT APTECH - Nhấn vào để xem chi tiết
Cập nhật công nghệ miễn phí cho tất cả cựu sinh viên APTECH toàn quốc
Tiết Thực Vì Cộng Đồng
Hội Thảo CNTT
Những khoảnh khắc không phai của Thầy Trò FPT-APTECH Ngày 20-11