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