iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 16
3
Everything on Azure

三十天.NET❤️Azure漸進式開發專案系列 第 16

三十天.NET與Azure漸進式開發專案(16): 藉由 SendGrid 發送 Email

2018-10-21.21.44.28-image.png

當專案開發到一定規模的時候,會希望系統發生Exception、整理異常資料發送Email給自己,而不是人工時時刻刻去log檔案查看。


介紹SendGrid

SendGrid - 維基百科說明:

SendGrid提供基於雲的電子郵件遞送服務,可幫助企業通過電子郵件發送。

主要應用在:

  • 排程發信給使用者
  • 各式報表
  • 驗證碼信件

主要使用 SendGrid 這樣第三方Email服務,比起自行架設郵件伺服器,穩固又牢靠,重要的是還不用自己維護郵件伺服器。另外業務使用量不大的情況,SendGrid免費贈送每個月25000封可以滿足一般需求量。

下面介紹 Azure 上通過 SendGrid 快速建立帳號,並通過它發送郵件:


建立方式

登錄 Azure 的管理網站,點開 +建立資源 > 搜尋SendGrid Email Deilvery:
2018-10-21.20.49.32-image.png

在建立畫面中,填寫基本資料後,測試專案情況點開Pricing tier選擇F1 free方案,SendGrid很貼心提供每月25000封免費郵件:
2018-10-21.20.48.24-image.png

SendGrid避免濫用情況,需要做信箱驗證。最後點選Create完成建立:
2018-10-21.20.54.13-image.png

SendGrid賬號創建完成後,可以在 所有設定 查看 Configurations 信息,找到帳號複製下來,後面在使用 SendGrid 發送郵件時,需要用到它做為SMTP 服務器驗證:
2018-10-21.20.56.57-image.png
2018-10-21.20.56.09-image.png

C#使用STMP+SendGrid發郵件程式

這邊有寫好的主控台程式程式,示範遇到除0錯誤時候發送郵件通知工程師:

using System;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;

namespace LogAndEmailDemo
{
    class Program
    {
        private static readonly string _username = "azure sendGrid上帳號";
        private static readonly string _password = "密碼";
        private static NetworkCredential _credentials = new NetworkCredential(_username, _password); 
        static void Main(string[] args)
        {
            try
            {
                int zero = 0;
                var error = (99 / zero);
            }
            catch (Exception e)
            {
                SendEamil("寄信Email地址",e.ToString());
            }
        }

        private static void SendEamil(string toMailAddress, string errorContent)
        {
            try
            {
                // Email寄信者、內容
                MailMessage mailMsg = new MailMessage();
                mailMsg.To.Add(new MailAddress(toMailAddress));
                mailMsg.From = new MailAddress(_username, _username);
                mailMsg.Subject = "我是標題";
                mailMsg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString($"<h1>我是錯誤內容</h1><br>{errorContent}", null, MediaTypeNames.Text.Html));

                // 初始化Smtp客戶端 > 寄信
                SmtpClient smtpClient = new SmtpClient("smtp.sendgrid.net", Convert.ToInt32(587));
                smtpClient.Credentials = _credentials;
                smtpClient.Send(mailMsg);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"===={DateTime.Now.ToString("yyyyMMdd HHmmSS")},寄信失敗====");
                Console.WriteLine(ex.Message);
            }
        }
    }
}
 

運行程式測試後
登登登,成功接收到發生Exception的信件:
2018-10-21.21.34.37-image.png

補充

【1】NuGet-SendGrid套件發信,使用方式可以參考GitHub-Sendgrid-Csharp:
2018-10-21.20.58.00-image.png

【2】查看報表:假如想要查看本月發信數量,可以到 SendGrid Account > Manage 查看
2018-10-21.21.25.54-image.png
2018-10-21.21.25.35-image.png

總結

雖然代碼不多,但示範如何在發生Exception時使用 SendGrid 發送電子郵件幫助工程師,希望對IT邦友有幫助。


上一篇
三十天.NET與Azure漸進式開發專案(15): Azure做Feed RSS訂閱鐵人賽文章功能
下一篇
三十天.NET與Azure漸進式開發專案(17): Analytics Query分析需要的Log資料
系列文
三十天.NET❤️Azure漸進式開發專案30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言