C# 發送 Email 範例解析|SMTP 寄信程式碼完整說明(.NET)|C# 自動化系列

更新 發佈閱讀 15 分鐘

在學會使用 C# SMTP 發送 Email 之後,下一步就是看懂實際的程式碼運作方式。本篇將針對 C# 發送 Email 範例 進行完整解析,從 SMTP 設定、寄信流程,到每一段程式碼的作用,帶你一步一步理解 .NET 寄信的核心邏輯。透過這篇教學,你不只是會用,還能真正掌握 C# SMTP 寄信的實作細節,並依需求進行修改與擴充。


本篇重點:

  • ✔ C# SMTP 發送 Email 程式碼解析
  • ✔ .NET 寄信流程完整說明
  • ✔ 關鍵物件(SmtpClient / MailMessage)解析

開始範例程式碼解析

範例的功能:資料夾內檔案自動放到信件的附件寄出

vocus|新世代的創作平台

1 . 開啟C# SMTP 發送 Email 教學|程式寄信完整實作(含範例)|C# 自動化系列 程式

vocus|新世代的創作平台

2 . 程式碼研究

我們找到button1按下會執行的程式碼,開始一行一行解讀。

private void button1_Click(object sender, EventArgs e)
{
string folderPath = @"C:\BackUp";

using (MailMessage mail = new MailMessage())
using (SmtpClient smtp = new SmtpClient("smtp.office365.com", 587))
{
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("你的寄信帳號@xxx.com", "寄信帳號的密碼");

mail.From = new MailAddress("你的寄信帳號@xxx.com");
mail.To.Add("你的收件帳號@xxx.com");
mail.Subject = "測試寄送附件";
mail.Body = "這是從資料夾自動加入附件的測試郵件";

if (Directory.Exists(folderPath))
{
string[] files = Directory.GetFiles(folderPath);
foreach (string file in files)
{
Attachment attachment = new Attachment(file);
mail.Attachments.Add(attachment);
}
}
else
{
MessageBox.Show("資料夾不存在");
return;
}

try
{
smtp.Send(mail);
MessageBox.Show("寄信成功");
}
catch (Exception ex)
{
MessageBox.Show("寄信失敗:" + ex.Message);
}
}
}

程式碼片段:

  1. string folderPath = @"C:\BackUp";
  2. using (MailMessage mail = new MailMessage())
  3. using (SmtpClient smtp = new SmtpClient("smtp.office365.com", 587))
  4. {

-------------------------------------------------------------------------------------------------------

第 1 行 宣告一個string(字串型態)的變數folderPath ,把要跟信件一起寄出的附件檔案存放的資料夾路徑,寫在這個變數裡面,等一下就能用這個變數找到檔案位置。

第 2 行 創建一個MailMessage類型的元件mail ,等等就可以把信件內容填到這個mail元件裡面,最後就可以寄出這個mail。

new MailMessage()是初始化的固定格式,.net 初始化元件的格式幾乎都長這樣,頂多類型帶不一樣而已。

using 是.net提供的用法,離開using的大括號後會自動幫你釋放資源,避免佔用記憶體。

第 3 行 創建一個SmtpClient類型的元件smtp ,可以用來發送信件。

new SmtpClient("smtp.office365.com", 587) 這是初始化的固定格式,告訴元件我們是要用office365寄信,port 使用 587。

*補充:

SmtpClient 是一個.net內建提供給你的類型,可以用來寄信。

new SmtpClient("smtp.office365.com", 587)new MailMessage() 你看這兩個初始化的格式都長很像,這就是.net初始化基本上會長的形式 new '某個你要的類型'() ,在小括號裡面帶東西則是先設定好某些預設值。

程式碼片段:

  1. smtp.EnableSsl = true;
  2. smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
  3. smtp.UseDefaultCredentials = false;
  4. smtp.Credentials = new NetworkCredential("你的寄信帳號@xxx.com", "寄信帳號的密碼");

-------------------------------------------------------------------------------------------------------

第 1 - 3 行 設定我們前面建立的smtp元件寄信的規格,因此這三行也都是固定格式,除非你有特殊需求再去調整,不然就用固定格式即可。

第 4 行 smtp.Credentials設定你要用哪個帳號去寄信,並且要提供密碼。

new NetworkCredential("你的寄信帳號@xxx.com", "寄信帳號的密碼");把你自己的帳號密碼替換進去。

smtp.Credentials = new NetworkCredential("[email protected]", "123");這樣就成功設定好要寄信的帳號了。

程式碼片段:

  1. mail.From = new MailAddress("你的寄信帳號@xxx.com");
  2. mail.To.Add("你的收件帳號@xxx.com");
  3. mail.Subject = "測試寄送附件";
  4. mail.Body = "這是從資料夾自動加入附件的測試郵件";

-------------------------------------------------------------------------------------------------------

第 1 行 前面建立的mail元件開始設定一下待會要寄出的內容,

mail.From = new MailAddress("[email protected]");設定mail是從哪個信箱寄出。

第 2 行 mail.To.Add("[email protected]");To就跟我們平常寄信的格式一樣,是設定收件人的意思。

如果想多個收件人其實非常簡單繼續往下增加就好。

mail.To.Add("[email protected]");

mail.To.Add("[email protected]");

mail.To.Add("[email protected]");

第 3 行 mail.Subject = "測試寄送附件";Subject就是設定信件的主旨。

第 4 行 mail.Body = "這是從資料夾自動加入附件的測試郵件";

Body就是設定信件的內容。

程式碼片段:

  1. if (Directory.Exists(folderPath))
  2. {

-------------------------------------------------------------------------------------------------------

第 1 行 if (Directory.Exists(folderPath))判斷放檔案的資料夾存不存在,存在才會進去大括號裡面開始把檔案附加到信件的附件裡面。

程式碼片段:

  1. string[] files = Directory.GetFiles(folderPath);
  2. foreach (string file in files)
  3. {
  4. Attachment attachment = new Attachment(file);
  5. mail.Attachments.Add(attachment);
  6. }

-------------------------------------------------------------------------------------------------------

第 1 行 Directory.GetFiles(folderPath)這是.net的內建功能,Directory如字面的意思就是目錄,GetFiles取得檔案,所以就會從你的資料夾路徑folderPath取得檔案,取回來的是一個string型態的陣列裡面放了資料夾底下所有檔案的路徑,然後我們用一個string型態的陣列files去裝取回來的值。

第 2 行 foreach (string file in files),用迴圈去把一個個檔案名稱抓出來放到string型態的變數file。

第 4 行 Attachment是用來裝信件附件檔的型態,我們創建一個並且初始化new Attachment(file)把檔案位置file丟進去,這樣檔案就會裝到attachment裡面。

第 5 行 mail.Attachments.Add(attachment);前面我們創建的MailMessage型態的元件mail,裡面的Attachments我們用Add把剛剛我們裝起來的attachment放進去。

迴圈跑完全部放進去以後,到時候信件的附件就會有資料夾裡面的所有檔案了。

程式碼片段:

  1. else
  2. {
  3. MessageBox.Show("資料夾不存在");
  4. return;
  5. }

-------------------------------------------------------------------------------------------------------

第 1 行 else放檔案的資料夾不存在,會進來這邊提示你資料夾不存在。

第 3 行 MessageBox.Show("資料夾不存在");彈跳視窗提示你資料夾不存在。

第 4 行 return是.net的內建用法,可以讓你返回原本你程式執行的地方,返回後return下面的程式碼就不會繼續執行了。

程式碼片段:

  1. try
  2. {
  3. smtp.Send(mail);
  4. MessageBox.Show("寄信成功");
  5. }

-------------------------------------------------------------------------------------------------------

第 1 行 try是.net內建用法放,用try包起來的區域可以防止程式錯誤時整個掛掉。

第 3 行 smtp.Send(mail);我們前面把所有信件的內容都組出來了,現在只要用smtp裡面提供的Send功能然後把組好的mail放進去,Send就會幫我們把信發出去。

第 4 行 MessageBox.Show("寄信成功");彈跳視窗提示一下我們成功把信寄出。

程式碼片段:

  1. catch (Exception ex)
  2. {
  3. MessageBox.Show("寄信失敗:" + ex.Message);
  4. }

-------------------------------------------------------------------------------------------------------

第 1 行 catch (Exception ex)當try裡面如果有程式出問題,程式不會掛掉,會被catch抓起來,並且我們建一個Exception類型ex放異常訊息。

第 3 行 MessageBox.Show("寄信失敗:" + ex.Message);用彈跳視窗來顯示錯誤訊息,Exception就如字面是例外的意思,這個類別有提供一個Message會儲存例外的訊息,我們只要ex.Message就能看裡面的錯誤內容是什麼。

結論

目前我們完成了Office365的版本,不過,通常我們個人的電腦不會去買Office365,都是公司才會買這種軟體,因此我們下一章就來講gmail的版本,這樣子就算使用個人電腦也可以完成練習喔!


留言
avatar-img
ITT Fun
0會員
15內容數
主要內容會教大家如何快速有效轉職到中大型公司內部系統的軟體工程師。 程式真的沒有很困難,不論之前覺得學習太枯燥乏味或是其他因素而放棄或從未開始,這邊會帶給大家不同的體驗。 我們會用實際案例來當作教學主軸,用我親身的經歷讓大家快樂學習程式,過程中可以累積很多程式作品還會提升很多成就感,同時還能增加成功轉職的機會!
ITT Fun的其他內容
2026/04/21
在實務開發中,使用 C# 發送 Email 是非常常見的需求,例如通知系統、寄送報表或自動提醒。本篇將帶你完整學會如何透過 SMTP 寄信,使用 .NET 實作 Email 發送功能,從基本設定到實際程式碼範例,一步一步建立可用的寄信流程。無論你是新手還是正在開發自動化工具,都可以透過這篇教學快速掌
Thumbnail
2026/04/21
在實務開發中,使用 C# 發送 Email 是非常常見的需求,例如通知系統、寄送報表或自動提醒。本篇將帶你完整學會如何透過 SMTP 寄信,使用 .NET 實作 Email 發送功能,從基本設定到實際程式碼範例,一步一步建立可用的寄信流程。無論你是新手還是正在開發自動化工具,都可以透過這篇教學快速掌
Thumbnail
2026/04/16
如果你已經完成 PDF 解析,本篇將針對程式碼進行詳細說明,解析 C# PDF 資料擷取的流程與邏輯,幫助你深入理解實作方式,並能應用在不同類型的文件處理場景中。
Thumbnail
2026/04/16
如果你已經完成 PDF 解析,本篇將針對程式碼進行詳細說明,解析 C# PDF 資料擷取的流程與邏輯,幫助你深入理解實作方式,並能應用在不同類型的文件處理場景中。
Thumbnail
2026/04/14
在資料處理中,C# PDF 解析是一個常見需求,例如擷取文件內容或整理資料。本篇將使用 PdfPig 套件,帶你完成 PDF 內容擷取的完整教學,讓你快速掌握文件自動化處理技巧。
Thumbnail
2026/04/14
在資料處理中,C# PDF 解析是一個常見需求,例如擷取文件內容或整理資料。本篇將使用 PdfPig 套件,帶你完成 PDF 內容擷取的完整教學,讓你快速掌握文件自動化處理技巧。
Thumbnail
看更多
你可能也想看
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
若我們能評估與選擇比較有成為商品機會的產品來研發,所研發的產品就比較有機會賺到錢。本文以市場規模、技術門檻評估商品化成功的機會,大眾廣泛會使用並願意付錢購買的東西,平常技術就可能解決顧客問題並製造出來的產品,比較有機會成為商品。利用商品機會選擇表,選擇比較有成為商品機會的產品,賺到錢的機會會比較高。
Thumbnail
若我們能評估與選擇比較有成為商品機會的產品來研發,所研發的產品就比較有機會賺到錢。本文以市場規模、技術門檻評估商品化成功的機會,大眾廣泛會使用並願意付錢購買的東西,平常技術就可能解決顧客問題並製造出來的產品,比較有機會成為商品。利用商品機會選擇表,選擇比較有成為商品機會的產品,賺到錢的機會會比較高。
Thumbnail
葉雪美╱北美智權報 專欄作家 CHIC主張,Chitado的產品A~E分別侵害了其四項系爭專利的設計,延續北美智權報第396期介紹Chitado產品A~C的內容、第397期接續介紹Chitado產品D~E的專利侵權比對分析及Chitado產品A~E分析結果後的重審判決。
Thumbnail
葉雪美╱北美智權報 專欄作家 CHIC主張,Chitado的產品A~E分別侵害了其四項系爭專利的設計,延續北美智權報第396期介紹Chitado產品A~C的內容、第397期接續介紹Chitado產品D~E的專利侵權比對分析及Chitado產品A~E分析結果後的重審判決。
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
C通常一部電影 網路影集 小說 漫畫 電玩 在最後一集或最後結局 可以把感動觀眾到哭的 結局劇情 可能有哪幾種劇情? 幸福課程 幸福教練黃老師 潮資訊媒體 社群編輯 在影視作品和文學作品的最後一集或結局, 有一些常見的劇情元素和情感觸發方式, 可以感動觀眾並引起哭泣
Thumbnail
C通常一部電影 網路影集 小說 漫畫 電玩 在最後一集或最後結局 可以把感動觀眾到哭的 結局劇情 可能有哪幾種劇情? 幸福課程 幸福教練黃老師 潮資訊媒體 社群編輯 在影視作品和文學作品的最後一集或結局, 有一些常見的劇情元素和情感觸發方式, 可以感動觀眾並引起哭泣
Thumbnail
許多人會補充維他命C發泡錠,補水同時補C,喝出自然保護力。到底發泡錠有哪些種類及好處呢?但市面上許多高單位維生素C發泡錠,推薦兒童喝嗎?本篇營養師分享維他命C每日建議攝取量,並推薦維生素什麼時候吃最好
Thumbnail
許多人會補充維他命C發泡錠,補水同時補C,喝出自然保護力。到底發泡錠有哪些種類及好處呢?但市面上許多高單位維生素C發泡錠,推薦兒童喝嗎?本篇營養師分享維他命C每日建議攝取量,並推薦維生素什麼時候吃最好
Thumbnail
C美女模特兒產業 美女寫真產業(紙本 電子 數位) 要如何和 web3.0科技技術互相合作 獲取更多的商機和發展 這些商業模式 如何發展新的周邊商品產品 幸福課程 幸福教練黃老師 潮資訊媒體 社群編輯 在台灣市場, 美女模特兒產業和美女寫真產業透過web3.0技術
Thumbnail
C美女模特兒產業 美女寫真產業(紙本 電子 數位) 要如何和 web3.0科技技術互相合作 獲取更多的商機和發展 這些商業模式 如何發展新的周邊商品產品 幸福課程 幸福教練黃老師 潮資訊媒體 社群編輯 在台灣市場, 美女模特兒產業和美女寫真產業透過web3.0技術
Thumbnail
日本盛開發一種新型酵母,持續加熱也能夠保持酒體的原本風味,在日本造成軒然大波,現在臺灣的唐吉軻德、mia c'bon也能看到其身影。文章闡述長期加熱清酒的問題,日本盛開發的新型態燗酒,以及豐富香氣和口感的品飲心得。
Thumbnail
日本盛開發一種新型酵母,持續加熱也能夠保持酒體的原本風味,在日本造成軒然大波,現在臺灣的唐吉軻德、mia c'bon也能看到其身影。文章闡述長期加熱清酒的問題,日本盛開發的新型態燗酒,以及豐富香氣和口感的品飲心得。
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
Gold 9 studio 的執行長黃翊媁女士,談起Gold 9 studio 時笑說公司只是人生的副業,但能把副業經營得有聲有色,甚至帶有對職人精神堅持的使命,這就已經不是副業的態度。她自嘲自己活得很土象星座,對每個事情都抱持著流程化和負責任的態度。
Thumbnail
Gold 9 studio 的執行長黃翊媁女士,談起Gold 9 studio 時笑說公司只是人生的副業,但能把副業經營得有聲有色,甚至帶有對職人精神堅持的使命,這就已經不是副業的態度。她自嘲自己活得很土象星座,對每個事情都抱持著流程化和負責任的態度。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
提供 數據服務 雲端服務 AI服務 資安服務 的四種公司, 分別該如何提升自家的競爭力, 使優質的客戶會主動找我們服務? 幸福教練 幸福課程黃家慶 潮資訊媒體 社群編輯 ##數據服務公司: #技術創新與數據分析能力: 不斷追蹤最新的數據技術趨勢, 確保公司保持
Thumbnail
提供 數據服務 雲端服務 AI服務 資安服務 的四種公司, 分別該如何提升自家的競爭力, 使優質的客戶會主動找我們服務? 幸福教練 幸福課程黃家慶 潮資訊媒體 社群編輯 ##數據服務公司: #技術創新與數據分析能力: 不斷追蹤最新的數據技術趨勢, 確保公司保持
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News