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

C# 使用 System.Web.Mail 快速實作發送電子郵件功能

     編輯:關於C語言

前言

.NET Framework 早期版本 (1.x/2.0) 提供了 System.Web.Mail 命名空間,讓開發者無需深入了解 SMTP/POP3 協定細節,即可輕鬆發送郵件。雖然現代專案建議使用 System.Net.Mail (功能更完整、支援 SSL/TLS),但理解舊版 API 有助於維護既有系統。本文示範基本發送流程與關鍵屬性設定。

核心類別介紹

  • MailMessage:代表一封郵件,封裝寄件者、收件者、主旨、內容、優先權等屬性
  • SmtpMail:靜態類別,負責透過指定 SMTP 伺服器發送 MailMessage

完整發送範例

using System;
using System.Web.Mail;

public class MailSender
{
    public static void SendTestMail()
    {
        // 1. 建立郵件物件
        MailMessage msg = new MailMessage();

        // 2. 設定基本屬性
        msg.From = "sender@example.com";
        msg.To = "recipient@example.com";
        msg.Cc = "cc@example.com";           // 副本
        msg.Bcc = "bcc@example.com";         // 密件副本
        msg.Subject = "測試郵件 - C# System.Web.Mail";
        msg.Body = "這是一封使用 System.Web.Mail 發送的測試郵件。";
        
        // 3. 設定格式與優先權
        msg.BodyFormat = MailFormat.Text;    // 或 MailFormat.Html
        msg.Priority = MailPriority.Normal;  // Low / Normal / High

        // 4. 指定 SMTP 伺服器 (若未設定,嘗試使用本機 IIS SMTP 服務)
        SmtpMail.SmtpServer = "mail.yourdomain.com"; // 格式:smtp.gmail.com:587

        try
        {
            // 5. 發送郵件
            SmtpMail.Send(msg);
            Console.WriteLine("郵件發送成功!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"發送失敗:{ex.Message}");
            // 實務上應記錄完整堆疊追蹤
        }
    }
}

重要屬性詳細說明

屬性說明範例值
From寄件者信箱"me@domain.com"
To收件者,多筆以分號分隔"a@x.com;b@y.com"
Cc / Bcc副本 / 密件副本"cc@domain.com"
Subject郵件主旨"系統通知"
Body郵件內容純文字或 HTML 字串
BodyFormat內容格式MailFormat.Text / Html
Priority優先權MailPriority.High
Attachments附件集合msg.Attachments.Add(...)

進階用法:發送 HTML 郵件與附件


// HTML 格式
msg.BodyFormat = MailFormat.Html;
msg.Body = @"

重要通知

請查收附件內容。

"; // 新增附件 MailAttachment attach = new MailAttachment(@"C:\Reports\monthly.pdf"); msg.Attachments.Add(attach); // 也可從 Stream 新增 (適用動態產生檔案) // MailAttachment attach = new MailAttachment(memoryStream, "report.pdf", MailEncoding.Base64);

常見問題與解決方案

1. 連線被拒絕 / 逾時

  • 確認 SMTP 伺服器位址、埠號正確 (標準 25、提交 587、SSL 465)
  • 檢查防火牆/雲端安全群組是否開放對應埠
  • 測試指令:telnet smtp.server.com 25

2. 郵件進入垃圾郵件

  • 設定正確的 SPF、DKIM、DMARC 紀錄
  • 避免主旨/內容包含過多垃圾郵件特徵詞
  • 使用可信任的發送 IP/域名

3. 中文亂碼

  • 確保 BodyFormat = MailFormat.Html 時,HTML 標頭宣告 <meta charset="utf-8">
  • 或設定 msg.Charset = "utf-8" (部分版本支援)

遷移建議:升級至 System.Net.Mail

System.Web.Mail 自 .NET 2.0 起標記為過時,新專案請直接使用 System.Net.Mail:

  • 支援 SmtpClient.EnableSsl (Gmail/Outlook 必須)
  • 支援非同步發送 SendMailAsync
  • 更完整的認證機制 (NetworkCredential)
  • 更好的附件處理 (Attachment 類別)
// 現代寫法範例
using (var client = new SmtpClient("smtp.gmail.com", 587))
{
    client.EnableSsl = true;
    client.Credentials = new NetworkCredential("user@gmail.com", "app-password");
    client.Send(mailMessage); // MailMessage 在 System.Net.Mail 中
}

結語

System.Web.Mail 雖然簡單易用,但功能受限且不再維護。理解其基本用法有助於維護舊專案,但所有新開發工作請採用 System.Net.Mail 或第三方庫 (MailKit、FluentEmail) 以獲得完整的現代郵件功能與安全性支援。

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