跳過到頁腳內容
Iron Academy Logo
C# 應用程式
C# 應用程式

其他分類

C# 發送電子郵件:Tim Corey 的深入探討

Tim Corey
1h 11m 27s

歡迎來到一個全面介紹如何在C# Windows Forms應用程式中使用Tim Corey的"C# App Start To Finish – Lesson 26"洞察電子郵件發送的教學。在這個課程中,Tim演示了如何構建電子郵件用戶功能,特別是在錦標賽追踪應用的情境下。

交易電子郵件——由用戶動作觸發的自動化、個人化訊息——對現代網頁應用程式來說是必不可少的。 C#網頁應用程式通常依賴於交易電子郵件API,例如Mailgun和SendGrid,來可靠且可擴展地傳送準備就緒的電子郵件。

這篇文章將指導您通過Tim演示的過程,包括決定在何處放置電子郵件代碼、創建助手方法,建立動態電子郵件並使用內建的C#程式庫發送它們。 Visual Studio是用於開發和測試C#應用程式中電子郵件功能的主要IDE。

像Mailtrap這樣的電子郵件傳送平台可以用來監控傳送性和在開發過程中測試電子郵件發送。

介紹

Tim從提醒我們核心需求開始:一場錦標賽只能同時進行一輪。這意味著一旦一輪結束,隊伍需要被通知他們的下一場比賽。 這些通知電子郵件是一種交易電子郵件,通常是在回應網頁應用中的用戶動作後自動發送的。 電子郵件是一個實用的解決方案,確保參與者被即時告知,Tim會逐步地展示如何建立這個功能。

使用專用的電子郵件服務,例如Amazon SES,可以幫助確保這些交易電子郵件的可靠且可擴展的傳送。

決定電子郵件邏輯的位置

Tim從處理一個重要問題開始:電子郵件邏輯應該放在哪裡? 他解釋說,應該把它放在應用程式已經在執行關鍵錦標賽邏輯的地方。 在這種情況下,最佳的位置是在UpdateTournamentResults方法內。

為什麼選擇這裡? 因為這個方法處理:

• 決定比賽的獲勝者

• 推進隊伍到下一輪

• 更新資料庫或文件存儲

通過將電子郵件邏輯放置在這裡,我們只會在一輪比賽結束後發送電子郵件,避免不必要地垃圾短信用戶。

Tim引入了一種策略,在更新結果之前和之後追踪當前回合:

• 如果回合數改變,我們知道新的一輪比賽已經開始。

• 這會觸發提供給用戶的比賽通知電子郵件。

檢查當前回合

為了確定一輪是否發生了變化,Tim創建了一個叫CheckCurrentRound的延伸方法。 這個方法遍歷錦標賽模型中的所有回合,並檢查回合中的每場比賽是否有贏家。

• 如果所有比賽都完成,它會增加一個輸出變量。

• 如果一輪未完成,它會停止檢查其他回合。

• 這個方法在評估錦標賽狀態後返回當前回合數。

Tim強調,以1開始輸出可以處理尚未完成回合的情況。 通過使用這個方法,應用程式可以動態檢測新回合的開始並觸發電子郵件。

將電子郵件邏輯抽取到一個獨立的類

Tim倡導創建一個專用的EmailLogic類。 這種方法:

• 保持與錦標賽邏輯分開的電子郵件相關代碼

• 使其在應用程式中可重複使用

• 有助於未來的擴展,例如發送付款提醒或錦標賽摘要

建議使用像MailKit這樣的專用電子郵件客戶端庫,對現代C#應用程序來說,它比過時的SmtpClient類提供了更強大的功能和更好的支持。

他設置了一個叫SendEmail的公共靜態方法,帶有參數:

• From(發件人電子郵件)

• To(收件人電子郵件)

• Subject

• Body

MailKit的BodyBuilder類可以有效地構建HTML電子郵件並添加附件,讓發送如PDF文件的電子郵件變得更輕鬆。

Tim建議第一版保持簡單,如果需要,可以稍後再添加CC和BCC。

準備當前回合以便通知

一旦確定當前回合,Tim使用LINQ提取出該回合的比賽列表。 每場比賽包含兩個競技隊伍的條目。

對於每場比賽,他循環經過:

  1. 每個隊伍條目

  2. 每位隊員

這確保了每個人都收到有關他們即將參加的比賽的電子郵件。當向多個收件人發送電子郵件時,可以使用InternetAddressList類和AddRange方法一次性高效地添加所有收件人的電子郵件地址。 確保每個收件人的電子郵件地址驗證也是非常重要的,以確保成功傳送。

Tim強調收集所有必要資訊的重要性,例如:

• 參加者的姓名和電子郵件

• 他們的隊伍名稱

• 對手的隊伍名稱

生成動態電子郵件內容

Tim接著專注於動態構建電子郵件主題和內容:

• 主題:簡潔且直接,例如,"您有一場新比賽與隊伍Rolling Thunder。"主題一般通過在代碼中設置一個string subject變量後分配給電子郵件消息。

• 內容:Tim使用StringBuilder高效地連接多行文字。 他解釋說,在C#中反覆添加字串是低效的,因為每次添加都會創建新的記憶體分配。

當生成電子郵件內容時,Tim考慮是否要發送純文字電子郵件還是HTML電子郵件。 純文字電子郵件簡單,與所有電子郵件客戶端兼容,且常用於內部通知或交易消息。 另一方面,HTML電子郵件允許更豐富的格式。 發送HTML和純文字版本可以提高傳送性並確保與各種電子郵件服務提供商兼容。 您可以通過設置MailMessage類的IsBodyHtml屬性為true來在C#中發送HTML電子郵件,或使用MailKit庫並修改消息內容以包含HTML內容。

使用StringBuilder允許應用程式:

• 處理多行的個性化消息

• 包含對手的隊伍和回合資訊

• 避免性能問題,即便是在發送數百封電子郵件時

Tim還處理特別情況,如不參加比賽的週期,在這期間隊伍不會有對手。

驗證電子郵件地址

在發送之前,Tim檢查參加者是否有一個有效的電子郵件地址。 他指出:

• 即使是簡單的空字串檢查也可以防止錯誤

• 全面的驗證(如正則表達式)是可能的,但對於大型數據集來說可能昂貴

• 對大多數應用程式來說,驗證電子郵件的存在就足夠了

這一步確保只有提供了電子郵件的參加者才會收到通知。

配置發信人地址

Tim解釋說,發信人電子郵件應儲存在App.config中以增加靈活性。 他補充道:

• senderEmail 為實際的電子郵件地址

• senderDisplayName 表示發信人的名字

許多電子郵件服務,例如Amazon SES,要求域名驗證以確保正確的傳送能力並避免垃圾郵件過濾器。 這個過程涉及添加和驗證您的域名才能通過他們的API可靠地發送電子郵件。

稍後,一個GlobalConfig助手會檢索這些值。 這種抽象允許發信人信息的變更而不需修改電子郵件邏輯代碼。

設置MailMessage

為了發送電子郵件,Tim使用內建於C#的System.Net.Mail命名空間。 步驟包括:

  1. 為發件人創建一個新的MailAddress,包括顯示名稱。 在配置新的mailaddress時,確保正確的帳戶設定和身份驗證以進行程式化的電子郵件發送。

  2. 實例化一個MailMessage對象

• 添加收件人的電子郵件地址

• 設置主題和內容

MailMessage類允許您通過Attachments屬性添加附件。 您可以通過設置MailMessage類的IsBodyHtml屬性為true來在C#中發送HTML電子郵件。

使用SMTP客戶端

最後,Tim設置SMTP客戶端來發送電子郵件:

• 配置主機,端口,憑證,以及如果需要,啟用SSL。 雖然您可以使用您自己的smtp伺服器,但使用基於雲的電子郵件服務,例如Amazon Simple Email Service (SES),往往更可靠且可擴展。

• 呼叫Send(mail)來傳輸消息

• 這處理了通過標準SMTP伺服器發送電子郵件的問題,如Gmail、Outlook或自定義伺服器,或通過像Amazon SES、Mailgun或Mailtrap這樣的電子郵件服務。

Amazon SES(簡單電子郵件服務)是AWS提供的具成本效益和可擴展的電子郵件服務,可以快速發送交易電子郵件。 要將Amazon SES整合到您的C#應用程式中,您需要安裝AWS SES Package,並且可能需要使用一個身份驗證令牌以進行安全訪問。 配置SMTP設置時,特別是在使用例如Gmail或Office365等服務時,確保適當的身份驗證和安全性非常重要。

他指出,出於安全原因,電子郵件伺服器常常對"From"地址強制限制,並建議使用虛擬或沙箱伺服器進行測試。

電子郵件流程總結

回顧Tim的過程:

  1. 在更新結果前檢測當前的錦標賽回合

  2. 更新錦標賽結果並檢測回合是否已推進

  3. 提取新回合的比賽

  4. 循環經過所有參加者和隊伍成員

  5. 生成動態電子郵件主題和內容

  6. 驗證電子郵件地址

  7. 通過GlobalConfig從App.config檢索發信人信息

  8. 使用MailMessage和SmtpClient發送電子郵件

要大規模發送交易電子郵件,建議使用交易電子郵件API,如SendGrid或Mailgun。 許多服務提供初始測試的免費計劃,SendGrid例如允許您每天發送100封電子郵件,並提供電子郵件性能的分析。 始終使用環境變數或安全的保管庫,如Azure Key Vault或AWS Secrets Manager,在您的C#應用程式中存儲敏感的憑證。 在開發過程中,您可以使用dotnet run來啟動您的應用程式並測試電子郵件發送功能。

Tim強調抽象化和模組化:通過隔離電子郵件邏輯,應用程式更易於維護、測試和擴展。

結語

Tim Corey的課程演示了在C#應用程式中發送電子郵件不僅僅是呼叫SmtpClient.Send()。 這需要仔細考慮何時發送電子郵件、收集相關信息、驗證收件人以及結構化代碼以便維護。 .NET框架通過簡單郵件傳輸協定(SMTP)提供支持,大多數C#應用程序都是通過此協定發送電子郵件的。

通過遵循Tim的方法,開發人員可以構建健壯的、可重用的電子郵件功能,可以隨著應用程式的增長而擴展,無論是錦標賽追蹤器、通知系統還是其他用戶為基礎的服務。 使用現代化的函式庫和協定,如SMTP可以確保C#應用程式中的電子郵件功能是可靠和可維護的。

Hero Worlddot related to C# 發送電子郵件:Tim Corey 的深入探討
Hero Affiliate related to C# 發送電子郵件:Tim Corey 的深入探討

通過分享您所愛的東西賺得更多

您是否在為使用.NET、C#、Java、Python或Node.js的開發者創建內容?將您的專業知識轉化為額外收入!

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我