GMail寄信程式碼(C#)

  • 4196
  • 0
  • C#
  • 2021-01-08

本篇會介紹在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();
}