C# NLog 套件寄送信件

March 30, 2024

想使用 NLog 寄送信件,可以透過設定 NLog.config 內的 MailKit target 達成。輕鬆又愉快。

直接使用 MailKit

1. 透過 NuGet 安裝 NLog 和 NLog.Mail。 2. 在 nlog.config 內的 extensions 標籤內加入 assembly:

<nlog>
  <extensions>
    <add assembly="NLog.MailKit"/>
  </extensions>
  ...

3. 在 nlog.config 內的 targets 標籤內加入 Mail target,以下為範例:

<target xsi:type="Mail" name="MailTarget 名稱" addNewLines="true" subject="郵件測試"
smtpServer="SMTP 伺服器位置" smtpPort="SMTP Port 號碼" smtpUsername="使用者名稱" smtpPassword="使用者密碼" 
smtpAuthentication="認證方式" from="寄件者位址" to="收件者位址"/>

4. 在 rules  標籤內加入規則:

<rules>
  <logger name="*" minlevel="Error" writeTo="MailTarget 名稱" />
</rules>

5. 可以自行撰寫一個 Error 的 Log 程式並啟動,檢查是否有發出錯誤訊息的郵件。 6. 若沒有如預期發出郵件,可以查看 nlog-internal.txt 內是否有錯誤訊息。

使用背景工作整合 Log 並寄出

雖然上方提到直接使用 NLog 搭配 MailKit 寄送訊息,但使用通用 Logger 紀錄訊息,再使用背景工作整合 Log 並寄出,是比較推薦的方式。

這麼做的好處,是可以將訊息立即記錄到記憶體或較快的儲存裝置中,不會因為網路的延遲影響 Log 的紀錄行為;此外也可以先整理 Log 內容。

在微軟的官方文件中,也說明 ILogger 介面沒有提供非同步的紀錄方法。這是因為紀錄訊息應該要能很快執行完。如果需要記錄到資料庫等較慢的儲存媒體,應該先記錄到記憶體的佇列或變數中,再使用背景工作寫入。

參考資料