[C#][Mail]透過SMTP發送信件

根據使用者需求,需要開發自動發信的系統,因此重新整理寄信程式碼並於此紀錄。

範例程式碼如下:

    public class MailModel
    {
        public string Sender { get; set; } //寄件者
        public string SenderName { get; set; } //顯示名稱
        public string Recipient { get; set; } //接收者
        public string RecipientName { get; set; } //顯示名稱
        public string Title { get; set; } //信件標題
        public string Content { get; set; } //信件內容
        public string SMTP_Host { get; set; }
        public int SMTP_Port { get; set; }
        public List<string> Files { get; set; }
    }
    
	public void SendMail(MailModel Model)
	{
		MailAddress from = new MailAddress(Model.Sender, Model.SenderName, Encoding.UTF8); //地址, 顯示名稱, 編碼方式
		MailAddress to = new MailAddress(Model.Recipient, Model.RecipientName, Encoding.UTF8); //地址, 顯示名稱
		MailMessage message = new MailMessage(from, to);  //MailMessage(寄信者, 收信者)

		//message.From = new MailAddress(Model.Sender, Model.SenderName, Encoding.UTF8);

		message.BodyEncoding = Encoding.UTF8; //E-mail編碼
		message.Subject = Model.Title; //E-mail主旨
		message.SubjectEncoding = Encoding.UTF8; //設定信箱主旨編碼方式
		message.Body = Model.Content; //E-mail內容
		message.BodyEncoding = Encoding.UTF8; //設定信箱內容編碼方式
		message.IsBodyHtml = true; //啟用 HTML 格式
		message.Priority = MailPriority.Normal; //設定優先權 MailPriority.Hight 會設為重要信件
		//message.Headers.Add("Return-Path", "*****@*****.*****"); //退信位置 

		//附加檔案
		if (Model.Files != null && Model.Files.Count > 0)
		{
			foreach (string file in Model.Files)
			{
				message.Attachments.Add(new Attachment(file)); //加入附加檔案
			}
		}

		SmtpClient smtpClient = new SmtpClient(Model.SMTP_Host, Model.SMTP_Port);    //設定E-mail Server和port
		smtpClient.EnableSsl = false; // 是否啟用 SSL,Gmial需要啟用 SSL
		smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; // 指定外送電子信箱的處理方式
		//smtpClient.Credentials = new System.Net.NetworkCredential("Account","Password"); 
		//利用帳號/密碼取得 Smtp 伺服器的憑證 

		try
		{
			smtpClient.Send(message);// 發送
			smtpClient.Dispose();
		}
		catch (Exception ex)
		{
			//無法使用信箱。 伺服器回應為: User (*****@*****.*****) unknown.
			//Console.WriteLine("Exception caught in XXXX: {0}",ex.ToString());
			//錯誤處理和紀錄
		}
		message.Dispose();//放掉宣告出來的MailMessage

	}

 

嘗試以自己的角度來整理並紀錄,也許會對一些人有幫助。

文章有錯、參考聯結有漏或是連結失效..等,還請幫忙告知,謝謝。
另外參考資料中有很多更棒的文章,建議多看看。