Dùng SmtpAppender trong Log4net với Gmail


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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s