IRONSOFTWAREHOME

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

C# App Start To Finish Lesson 26 - Emailing Users

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類。 這種方法:

  • 將電子郵件相關的程式碼與比賽邏輯分開

  • 使其可在應用程式上重用

  • 有助於未來的擴展,例如發送付款提醒或比賽總結

建議現代C#應用程式使用專用的電子郵件客戶端程式庫,例如MailKit,因為它提供了強大的功能和比過時的SmtpClient類更好的支援。

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

  • From(發件人郵件)

  • To(收件人郵件)

  • 主題

  • 內容

從MailKit的BodyBuilder類可以用於構建HTML電子郵件並高效地新增附件,這使得用檔案如PDFs以便發送電子郵件更加容易。

Tim建議初版保持簡單,需要時再加上CC和BCC。

為通知準備當前回合

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

對於每場比賽,他遍歷:

  1. 每個團隊條目

  2. 每個團隊成員

這確保了每個人在他們即將到來的比賽中都會收到電子郵件。當向多個收件人發送電子郵件時,InternetAddressList類和AddRange方法可以用於有效地一次新增所有收件人的電子郵件地址。 同時也務必驗證每位收件人的電子郵件地址以確保成功投遞。

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

  • 參與者的名字和電子郵件

  • 他們的團隊名字

  • 對手的團隊名字

生成動態電子郵件內容

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

  • 主題:簡單直接,例如"您有一場與團隊Rolling Thunder的新比賽。"主題通常是用程式碼中的字串主題變數設置的,然後分配給電子郵件訊息。

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

在生成電子郵件內容時,Tim考慮是發送純文字電子郵件還是HTML電子郵件。 純文字電子郵件簡單,與所有電子郵件客戶端相容,通常用於內部通知或交易訊息。 而HTML郵件允許更豐富的格式。 發送HTML和純文字版本都可以改善交付率並確保與各種電子郵件服務提供商的相容性。 您可以通過將MailMessage類的IsBodyHtml屬性設置為true來發送HTML郵件,或通過使用MailKit程式庫並修改訊息內容以包含HTML內容來發送HTML郵件。

使用StringBuilder允許應用程式:

  • 處理個性化訊息的多行

  • 包含對手的團隊和回合資訊等詳細資料

  • 即使發送數百封郵件也避免性能問題

Tim還處理了特殊情況,比如輪空週,當一個隊伍沒有對手時。

驗證電子郵件地址

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

  • 即使簡單檢查空字串也能防止錯誤

  • 全面的驗證(如regex)是可能的,但對於大資料集來說可能很昂貴

  • 對於大多數應用程式,確認電子郵件的存在已足夠

這步驟確保了只有提供電子郵件的參與者才能接收通知。

配置發件人地址

Tim解釋說,發件人的電子郵件應儲存在App.config中以便靈活設定。 他新增了:

  • senderEmail為實際電子郵件地址

  • senderDisplayName為發件人的名字

許多電子郵件服務,如Amazon SES,需要域名驗證以確保正確的投遞並避免垃圾郵件過濾器。 這個過程包括在能夠通過其API可靠地發送電子郵件之前,新增和驗證您的域名。

之後,一個GlobalConfig幫助程式會檢索這些值。 這種抽象允許在不修改電子郵件邏輯程式碼的情況下更改發件人資訊。

設置MailMessage

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

  1. 為發件人建立一個新的MailAddress,包括顯示名稱。 在配置新郵件地址時,確保正確的帳戶設置和驗證以便程式化電子郵件發送。

  2. 實例化一個MailMessage物件

  • 新增收件人電子郵件地址

  • 設置主題和內容

MailMessage類允許您通過Attachments屬性新增附件。 您可以通過將MailMessage類的IsBodyHtml屬性設置為true來發送HTML電子郵件。

使用SMTP客戶端

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

  • 配置主機、端口、憑證,並根據需要啟用SSL。 雖然您可以使用您自己的SMTP伺服器,但使用基於雲的電子郵件服務,如Amazon簡單電子郵件服務(SES)通常更可靠和可擴展。

  • 調用Send(mail)以傳送訊息

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

Amazon SES(簡單電子郵件服務)是AWS提供的用於快速發送交易電子郵件的高效且可擴展的電子郵件服務。 要將Amazon SES整合到您的C#應用程式中,您需要安裝AWS SES套裝,並可能需要使用身份驗證令牌來進行安全存取。 當配置SMTP設置時,尤其是使用如Gmail或Office365等服務時,安全應用存取是重要的,以確保正確的驗證和安全性。

他指出,電子郵件伺服器經常對"發件人"地址的安全進行限制,並且建議使用假或沙盒伺服器進行測試。

電子郵件流程總結

回顧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#應用程式中儲存敏感憑證。 在開發過程中,您可以使用.NET run啟動您的應用程式並測試電子郵件發送功能。

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

最後的想法

Tim Corey的課程演示了在C#應用程式中發送電子郵件不僅僅是調用SmtpClient.Send()。 這需要仔細考慮何時發送電子郵件、收集相關資訊、驗證接收者,並結構化程式碼以便於維護。 .NET框架通過簡單郵件傳輸協議(SMTP)提供了強大的電子郵件發送支援,這是從C#應用程式發送電子郵件的最常見方式。

通過遵循Tim的方法,開發者可以構建強大、重用的電子郵件功能,無論是比賽追踪器、通知系統,還是其他使用者為基礎的服務,這些功能都能隨著應用程式擴展。 使用現代程式庫和協議如SMTP確保在C#應用程式中的電子郵件功能可靠且可維護。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
被全球數百萬工程師信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立