本篇會介紹在C#中如何寄信
若想直接取得完整程式碼可以拉到最下面
在C#中要寄信,需要用到System.Net.Mail這個命名空間
其中最重要的兩個類別,分別為SmtpClient和MailMessage
運作的原理為
SmtpClient用來建立與SMTP伺服器的管道,透過MailMessage建立信件主體
並將信件傳遞給SMTP伺服器,交給SMTP伺服器來發送信件
(SMTP: Simple Mail Transfer Protocol,簡單郵件傳輸協定,為網路上傳輸電子郵件的標準)
通常各家Email都會有自己的SMTP伺服器,只要設定參數就可以使用
不需要額外自己架設SMTP伺服器,至於參數是多少上網查一下就可以找到
比如說:
Hotmail :
Hotmail SMTP Server Name : smtp.live.com
Hotmail SMTP Port : 25 or 465
Gmail:
Gmail SMTP Server Name : smtp.gmail.com
Gmail SMTP Port : 587
接下來介紹程式碼,這裡使用Gmail作為範例
首先要先建立SmtpClient:
SmtpClient client = new SmtpClient();
//SmtpClient client = new SmtpClient("smtp.gmail.com"); //傳入Server
//SmtpClient client = new SmtpClient("smtp.gmail.com", 587); //傳入Server和Port
client.Host = "smtp.gmail.com"; //設定Server
client.Port = 587; //設定Port
client.Credentials = new NetworkCredential(Account, Password); //設定寄件人的帳號密碼
client.EnableSsl = true; //是否啟用SSL驗證
其中EnableSsl要看每一家信箱的設定,Gmail預設為true
再來建立信件主體,建構式有四種:
MailMessage mail = new MailMessage();
//傳入寄件人與收信人的EMAIL
//MailMessage mail = new MailMessage(strFromAddress, strToAddress);
//傳入寄件人與收信人的MailAddress物件
//MailMessage mail = new MailMessage(new MailAddress(strFromAddress), new MailAddress(strToAddress,strToName));
//寄件人、收信人、信件標題、信件內容
//MailMessage mail = new MailMessage(strFromAddress, strToAddress, strTitle, strBody);
其中MailAddress是一個地址物件,若只傳一個參數是EMAIL地址。例如
MailAddress(“test@test.com”)
在信件中就會顯示 : test@test.com
若傳兩個參數是EMAIL地址和名稱,例如:
MailAddress(“test@test.com”,”測試人員”)
在信件中就會顯示 : 測試人員<test@test.com>
另外MailAddress還可以傳入第三個參數,告知使用何種編碼,例如:
MailAddress(“test@test.com”,”測試人員”, Encoding.UTF8)
再來是設定信件的寄件人與收件人:
//編譯錯誤,mail.From.Address為唯讀值
//mail.From.Address = Account;
//發信人,這裡一定要使用MailAddress物件,且發信人地址會和client.Credentials設定的帳號相同
mail.From = new MailAddress(Account, "測試人員");
//設定收件人,可以為字串
mail.To.Add(strToMailAddress);
//可以使用MailAddress物件
//mail.To.Add(new MailAddress(strToMailAddress));
//可以一次寄給多個收件人,EMAIL地址用逗號(,)隔開
//mail.To.Add("test1@test.com,test2@test.com");
//也可以分開加
//mail.To.Add("test1@test.com");
//也可以分開加
//mail.To.Add("test2@test.com");
//副本操作方式同上
//mail.CC.Add("test3@test.com");
//密件副本操作方式同上
//mail.Bcc.Add("test4@test.com");
再來是設定內容:
//設定標題
mail.Subject = MailTitle;
//標題編碼
mail.SubjectEncoding = Encoding.UTF8;
//是否使用html當作信件內容主體
mail.IsBodyHtml = true;
//信件內容
mail.Body = Content.ToString();
//內容編碼
mail.BodyEncoding = Encoding.UTF8;
其中要注意的是IsBodyHtml這個參數
若設定為true,則可以使用html語法
信件內容要換行時,加上<br>就可以換行了
若設定為false,則視為文字檔,換行時要加上\r\n
另外如果想加入附件的話,需要使用Attachment物件
//取得檔案
Attachment attachment = new Attachment(@"C:\fakepath\test.txt");
//加入信件
mail.Attachments.Add(attachment);
Attachment有好幾個建構式,除了傳入檔案路徑之外
還可以設定MIME類別(媒體類別)、Header(標頭)的ContentType字串和資料流Stream的使用
有興趣的讀者可以去查詢詳細使用方法,這裡使用最簡單的檔案路徑
當信件主體設定完成後,就可以發送出去了
client.Send(mail);
//最後不要忘記釋放資源
attachment.Dispose();
mail.Dispose();
client.Dispose();
以上為C#簡單的寄信程式,是不是很簡單啊
不過依據收信人的信箱設定,信件有可能跑到垃圾信件裡就是了
以下為完整程式碼:
string Account = "testing@gmail.com";
string Password = "test123";
SmtpClient client = new SmtpClient();
client.Host = "smtp.gmail.com";
client.Port = 587;
client.Credentials = new NetworkCredential(Account, Password);
client.EnableSsl = true;
MailMessage mail = new MailMessage();
mail.From = new MailAddress(Account);
mail.To.Add("test1@test.com");
mail.Subject = "測試信";
mail.SubjectEncoding = Encoding.UTF8;
mail.IsBodyHtml = true;
mail.Body = "第一行<br> 第二行<br>第三行<br>";
mail.BodyEncoding = Encoding.UTF8;
Attachment attachment = new Attachment(@"C:\fakepath\test.txt");
mail.Attachments.Add(attachment);
try
{
client.Send(mail);
}
catch (Exception ex)
{
throw ex;
}
finally
{
attachment.Dispose();
mail.Dispose();
client.Dispose();
}