[Azure] 使用通訊服務(Communcation Service)完成寄送電子郵件的功能

在Microsoft Azure的雲端服務中,除了原本就有的SendGrid可以提供寄信的功能外,日前還推出了通訊服務(Communcation Service)的功能,讓有寄發信件需求的應用程式可以直接申請服務並寄送信件

由於通訊服務在提供電子郵件寄送的功能還在預覽中,日後還有可能會調整,所以可以先藉由這篇文章瞭解一下該如何使用,未來正式GA後應該就可以直接使用了

建立通訊服務並設定電子郵件寄發的功能步驟稍微有點多,但是照著步驟設定,很快就可以完成並送出第一封信了

1.先進入Azure Portal,並新增名為"通訊服務"的功能

2.建立完成後,進入到這個通訊服務的功能中,並點選[電子郵件]=>[網域]的功能,並點選[連線網域]的按鈕

3.點選了連線網域後,但因為我們還沒有建立電子郵件服務,所以在展開的視窗中,點選[新增電子郵件服務]

4.在新增的畫面中,輸入要新增的電子郵件服務資訊

5.當電子郵件服務建立完成後,我們先進入到電子郵件服務的功能中,並點選[佈建網域]=>[新增網域]

如果你希望寄出的Mail的寄件者是綁定自己的網域的話,可以選擇[自訂網域],如果沒有自己的網域,想要透過微軟的網域進行寄信,那就選擇[Azure 網域]就可以。在這裡,我先選擇[Azure 網域],由微軟的網域作為寄件者當作我的電子郵件服務設定

6.點選了[Azure 網域]後,Azure會開始建立第三網域設定,稍待一下就可以看到EMail的寄件網域已經完成建立了

7.在這裡,我們先點選建立好的網域,然後進入[MailFrom addresses]的設定,在這裡可以設定電子郵件的寄件者資訊。

8.在MailFrom addresses裡預設會建立一個DoNotReply的寄件者。我們可以自行新增不同名稱的寄件者資訊,所以在這裡我們先建立一個"System Notification"的寄件者

看到新建立完成的寄件者顯示在畫面上,代表網域與電子郵件的設定已經到了一個段落,可以先關掉

9.接著,我們再回到[通訊服務]裡,這時我們再去連線網域的功能中,就可以選到剛剛建立的電子郵件服務以及Azure 網域的設定

10.完成通訊服務與電子郵件的連接設定後,就可以看到電子郵件通訊服務已經完成了。接下來我們就可以開始撰寫程式進行郵件的發送

11.進到[通訊服務]中的[金鑰]頁面,先把[連線字串]設定複製起來,等一下會用到

12.開啟Visual Studio的專案,並在專案中安裝名為[Azure.Communcation.Email]的NuGet套件

13.加入下列程式碼

using Azure.Communication.Email;

static void Main(string[] args)
{
    string strCommuncationServiceConnectionString = "[這裡放入連線字串]";
    string strSubject = "[這是主旨]";
    string strBody = "[這是內容]";
    string strFromMail = "[在這裡放入寄件者信箱,必須要與MailFrom addresses裡的設定相同]";

    bool blIsSuccess = true;

    EmailClient emailClient = new EmailClient(strCommuncationServiceConnectionString);

    // 加入本文
    var emailContent = new EmailContent(strSubject)
    {
        Html = strBody
    };

    // 加入多個收件者
    List<EmailAddress> emailAddresses = new List<EmailAddress>();
    emailAddresses.Add(new EmailAddress("maduka_bor@hotmail.com", "maduka"));
    EmailRecipients emailRecipients = new EmailRecipients(emailAddresses);

    try
    {
        // 寄送信件
        var emailMessage = new EmailMessage(strFromMail, emailRecipients, emailContent);
        EmailSendOperation emailSendOperation = emailClient.Send(Azure.WaitUntil.Completed, emailMessage);
        EmailSendResult statusMonitor = emailSendOperation.Value;
        string operationId = emailSendOperation.Id;
    }
    catch (Exception ex)
    {
        blIsSuccess = false;
    }
}

14.程式執行完之後,就可以看到已經收到這封從通訊服務寄過來的信了

通訊服務在Azure上提供了另一個寄送EMail的選擇,未來在Azure上寄信不見得只能選用SendGrid,也可以有通訊服務可以使用。費用的部份也是很佛心的每封信 NT0.00761元而已,便宜到不行。大家可以多多利用喔

參考資料
Azure 通訊服務定價
快速入門 - 在 Azure 通訊服務中開始建立和管理電子郵件通訊服務資源
快速入門:如何使用 Azure 通訊服務資源來連線已驗證的電子郵件網域
Azure 通訊服務的電子郵件網域和寄件者驗證
快速入門:如何使用 Azure 通訊服務來傳送電子郵件