使用Google SMTP 寄發信件 - antqtech/KM GitHub Wiki

背景說明:

本文將示範如何使用 Google 的 SMTP 伺服器來完成此驗證信的寄送設置,提供完整的寄信流程與相關配置。

前置作業(Gmail帳戶設置):

若要使用 SMTP 功能寄信,需要先申請 [應用程式密碼],以下是申請步驟:

1.請先確保已登入要設置的google帳號,並進入安全設定頁面

2.在【登入Google的方式】區塊中=>點選【兩步驗驟證】 螢幕擷取畫面 2024-10-30 132753

3.點擊【開始使用】按鈕。

4.設定驗證電話: 輸入手機號碼並選擇驗證方式(傳送簡訊/電話) ,完成後按【下一步】。

5.填入收到的驗證碼,按【下一步】。然後點擊【啟用】。

6.返回【兩步驟驗證】頁面,找到【應用程式密碼】並點擊進入。

螢幕擷取畫面 2024-10-30 134336

7.為密碼設定名稱,按【建立】生成應用程式密碼。

螢幕擷取畫面 2024-10-30 135225

8.畫面將顯示16字位元的應用程式密碼,請妥善保存,稍後SMTP設定時將會使用到。 螢幕擷取畫面 2024-10-30 135247

完成以上步驟後,就可以寫程式碼設定SMTP,以下範例程式碼顯示如何在C#中使用SMTP設定來實現Gmail寄信功能。

範例使用程式碼實現SMTP寄信流程

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

public void SendEmail(string recipientEmail, string subject, string body) { // 設定 SMTP 伺服器 SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 465) { EnableSsl = true, Credentials = new NetworkCredential("你的gmail帳號@gmail.com", "google應用程式密碼") };

`// 設定郵件內容`
`MailMessage mailMessage = new MailMessage`
`{`
    `From = new MailAddress("你的gmail帳號@gmail.com", "你的網站名稱"), // 可選:自定義寄件人名稱`
    `Subject = subject,`
    `Body = body,`
    `IsBodyHtml = true // 若內容包含 HTML,則設為 true`
`};`
`mailMessage.To.Add(recipientEmail);`

`try`
`{`
    `// 發送郵件`
    `smtpClient.Send(mailMessage);`
    `Console.WriteLine("確認信已成功寄出");`
`}`
`catch (Exception ex)`
`{`
    `Console.WriteLine($"寄信失敗:{ex.Message}");`
`}`

}

程式碼說明:

  • SmtpClient:用來設定SMTP伺服器,連接埠,是否啟用SSL,以及帳號或密碼。
  • MailMessage: 用來設定郵件內容,包括寄件人,收件人,主旨和內容。
  • Try-Catch: 添加錯誤處理以便偵測寄信錯誤並進行相應處理(如日誌紀錄或顯示錯誤錯誤訊息)。

使用情境: 新會員的帳號啟用信(範本)

此功能應用於新註冊會員的帳號啟用信。您可以在body中HTML隔式的驗證連結,指向網站的帳號啟用面。例如:

string emailBody = $@" <h2>歡迎加入我們的網站!</h2> <p>請點擊以下連結以啟用您的帳戶:</p> <a href='https://yourwebsite.com/activate?token={activationToken}'>啟用帳戶</a> <p>如果您沒有進行此註冊,請忽略此信。</p> ";

在註冊流程中生成 activationToken 並包含在連結中,以便用戶點擊後導向您的後端進行驗證和帳戶啟用。

activationToken是一個用來唯一標識新會員並確保帳號啟用的安全性標記(token)。一般來說,這個token是在用戶註冊時由後端系統產生的,可以利用以下方法生成:

1.使用GUID(Globally Unique Identifier)生成唯一Token:

GUID是一種全球唯一的識別碼,可以直接生成作為token。C#中可以用以下方式生成:

string activationToken = Guid.NewGuid().ToString();

2.加密生成Token: 如果希望token包含用戶ID或其他信息,可以使用加密算法對其進行加密,例如JWT(Json Web Token)。這樣可以在後端解密並驗證token是否有效。

確認信連結的處理

使用者點擊連結後,系統可根據URL中的token值找到對應的會員紀錄,確認後更新狀態至已啟用。

⚠️ **GitHub.com Fallback** ⚠️