首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 發送電子郵件:SmtpClient 完整實作與常見坑點解析

     編輯:關於C#

核心類別:System.Net.Mail.SmtpClient + MailMessage

.NET 2.0+ 建議使用 System.Net.Mail 命名空間,舊版 System.Web.Mail 已標記過時。

標準發送範例(Gmail SMTP + SSL)


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

public void SendEmail()
{
    var msg = new MailMessage();
    msg.To.Add("recipient@gmail.com");
    msg.From = new MailAddress("sender@gmail.com", "顯示名稱", Encoding.UTF8);
    msg.Subject = "測試郵件";
    msg.SubjectEncoding = Encoding.UTF8;
    msg.Body = "

HTML 內容

支援中文

"; msg.BodyEncoding = Encoding.UTF8; msg.IsBodyHtml = true; msg.Priority = MailPriority.High; using (var client = new SmtpClient()) { client.Host = "smtp.gmail.com"; client.Port = 587; // TLS port client.EnableSsl = true; // 必須啟用 client.Credentials = new NetworkCredential("sender@gmail.com", "應用程式密碼"); // 非帳號密碼 client.DeliveryMethod = SmtpDeliveryMethod.Network; client.Timeout = 30000; try { client.Send(msg); Console.WriteLine("發送成功"); } catch (SmtpException ex) { Console.WriteLine($"SMTP 錯誤: {ex.StatusCode} - {ex.Message}"); } catch (Exception ex) { Console.WriteLine($"一般錯誤: {ex.Message}"); } } }

三大常見失敗原因與解決

現象原因解決
Authentication failed / 535使用帳號密碼而非應用程式密碼;或未開啟「低安全性應用程式存取權」Google/Gmail/Outlook 皆需建立**應用程式密碼**(App Password),或使用 OAuth 2.0
EHLO 回應錯誤 / 主機名稱包含中文SmtpClient 送出 EHLO <MachineName>,電腦名稱含中文導致 SMTP 伺服器拒絕將電腦名稱改為純英文/數字,或設定 client.Host 為 IP(不推薦)
憑證驗證失敗公司防火牆/Proxy 進行 SSL 攔截,導致遠端憑證不受信加入 ServicePointManager.ServerCertificateValidationCallback += (s,c,h,e) => true;(僅測試環境),生產環境請匯入正確根憑證

進階主題

  • 附件:msg.Attachments.Add(new Attachment(@"C:\file.pdf"));
  • 內嵌圖片:使用 AlternateView + LinkedResource 設定 ContentId,HTML 中 ``
  • 非同步發送:await client.SendMailAsync(msg);(.NET 4.5+),避免阻塞 UI 執行緒
  • 大量發送:建立單一 SmtpClient 實例重用連線,配合 SemaphoreSlim 限制併發數
  • 測試用 SMTP:smtp4dev(本地模擬 SMTP 伺服器,Web 介面檢視郵件)

結語

掌握「SSL/TLS 設定、認證方式、電腦名稱編碼」三大關鍵,即可解決 90% 的發送失敗案例。生產系統建議引入 FluentEmail、MailKit 等成熟庫,支援 OAuth、DKIM、模板引擎等企業級功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved