SmtpAppender được dùng khi bạn muốn tự động gửi thông tin vào email, để làm điều này bạn cần có một máy chủ SMTP, tuy nhiên bạn cung có thể dùng máy chủ SMTP có sẵn của dịch vụ Gmail. Vấn đề duy nhất là SmtpAppender không hỗ trợ SSL, vì vậy bạn sẽ cần làm một số thứ để dùng được nó.
Cách làm ở đây là tôi viết một lớp thừa kế từ SmtpAppender, tôi đặt tên là SmtpSslAppender, trong đó tôi sẽ override lại hàm SendEmail có trong lớp cha, và lớp này cũng có thêm 1 thuộc tính là EnableSsl, nếu đặt nó là true (mặc nhiên) thì các thao tác gửi thư sẽ được thực hiện thông qua kết nối SSL.
Nội dung lớp SmtpSslAppender như sau:
Imports System.Net.Mail Public Class SmtpSslAppender Inherits log4net.Appender.SmtpAppender Private m_enableSsl As Boolean = True Public Property EnableSsl() As Boolean Get Return m_enableSsl End Get Set(ByVal value As Boolean) Me.m_enableSsl = value End Set End Property Protected Overrides Sub SendEmail(ByVal messageBody As String) Dim smtpClient As New SmtpClient() If SmtpHost IsNot Nothing And SmtpHost.Length > 0 Then smtpClient.Host = SmtpHost End If smtpClient.Port = Port smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network smtpClient.EnableSsl = EnableSsl If Authentication = SmtpAuthentication.Basic Then smtpClient.Credentials = New System.Net.NetworkCredential(Username, Password) ElseIf Authentication = SmtpAuthentication.Ntlm Then smtpClient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials End If Dim mailMessage As New MailMessage() mailMessage.Body = messageBody mailMessage.From = New MailAddress(From) mailMessage.To.Add([To]) mailMessage.Subject = Subject mailMessage.Priority = Priority smtpClient.Send(mailMessage) End Sub End Class
Để sử dụng, bạn viết file cấu hình cho log4net như sau:
<log4net> <appender name="SmtpSslAppender" type="MyExp.SmtpSslAppender"> <to value="zyx@gmail.com" /> <from value="zyx@gmail.com" /> <subject value="<SUBJECT>" /> <smtpHost value="smtp.gmail.com" /> <bufferSize value="100" /> <port value="587" /> <lossy value="false" /> <authentication value="Basic" /> <userName value="zyx@gmail.com" /> <password value="password here" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" /> </layout> </appender> <root> <level value="DEBUG" /> <appender-ref ref="SmtpSslAppender" /> </root> </log4net>
Trong đó, MyExp là tên root namespace. Khi dùng nhớ đặt các thông số cho chính xác là chạy ngon lành