目的: 畫面 & Email 的換行處理
xtype: "label" 欄位 , Tmp_content=Tmp_content +"<br>" ;
2>Email內容:
1>*.js
var Tmp_sub_content6 = "已經接收器材:\r\n"
+ r_V20302_content6 + "\r\n"
+ "請至 AMM系統 V20304: 拆檢/測試結果登錄做後續處理。\r\n";
目的: 畫面 & Email 的換行處理
目的: V20107D - Email 附加檔案 - *.xlsx 檔案
目的: Web Email 用法說明
從 .Net2.0 開始, System.Net.Mail 命名空間提供開發者建立及傳送郵件訊息的相關方法。
public MailMessage() public MailMessage(string from,string to) public MailMessage(string from,string to,string subject,string body) public MailMessage(MailAddress from,MailAddress to)
public SmtpClient(); public SmtpClient(string host); public SmtpClient(string host, int port);
//建立一個MailMessage,同時指明 MailForm, MailTo, Subject, Body MailMessage mail = new MailMessage ("jane@contoso.com", "ben@contoso.com", "Mail Subject", "Mail Body Test"); //寄件者, 收件者, 主旨, 本文內容 MailMessage mail = new MailMessage(); mail.From = new MailAddress("jane@contoso.com", "DisplayName"); //email, 顯示名稱 mail.To.Add(new MailAddress("ben.test@contoso.com", "ben test")); mail.To.Add(new MailAddress("ben test<ben.test@contoso.com>")); //使用角括弧,可使用一個參數同時包含顯示名稱和email mail.To.Add("ben test<ben.test@contoso.com>"); //這樣使用也行。 but..中文..(請看下面注意說明) mail.Subject = "Mail Subject"; mail.Body = "Mail Body Test"; //副本、密件副本 mail.CC.Add(new MailAddress("ben4@contoso.com", "ben4")); mail.Bcc.Add(new MailAddress("ben3@contoso.com", "ben3")); //DeliveryNotificationOptions:通知狀態 OnSuccess, OnFailure, Delay, None, Never //ReplyTo:設定一個回覆地址 //Priority:設定電子郵件的優先順序 mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure | DeliveryNotificationOptions.OnSuccess; mail.ReplyTo = new MailAddress("ben5@contoso.com", "ben5"); mail.Priority = MailPriority.High; //html編碼 mail.Body = "<html><body><h1>Picture</h1><br><img src=\"cid:Pic1\"></body></html>"; mail.IsBodyHtml = true; mail.BodyEncoding = Encoding.UTF8;
當使用 mail.To.Add("ben test<ben.test@contoso.com>"); 這個方式加入email時,
若顯示名稱為中文時會產生錯誤,例如:mail.To.Add("測試<ben.test@contoso.com>"); 會跳出"指定字串不在電子郵件地址的必要表單中"的錯誤訊息.
只能使用這個方式 mail.To.Add(new MailAddress("測試<ben.test@contoso.com>"))
或將顯示名稱放在第二個參數 mail.To.Add(new MailAddress("ben.test@contoso.com", "測試"));
SmtpClient client = new SmtpClient("smpt.gmail.com"); //建立 SMTP ,並指定 SMTP Server client.Credentials = new System.Net.NetworkCredential("user", "pwd"); //驗證寄件者 client.EnableSsl = true; //是否啟用 SSL client.Port = 25; //指定 SMTP 交易連接埠 SendMail(client, mail);
//SmtpClient Smtp = new SmtpClient(); //建立SMTP連線
//Smtp.Send(mail); //發送 private void SendMail(SmtpClient client, MailMessage mail) { try { client.Send(mail); //寄送郵件 MessageBox.Show("email send"); } //Handle Mail Exceptions catch (InvalidOperationException exInvalidOperation) //沒有指定 SMTP Server { MessageBox.Show(exInvalidOperation.Message.ToString()); } catch (SmtpFailedRecipientException exSmtpFailedRecipient) //指定錯誤的收件者 { MessageBox.Show(exSmtpFailedRecipient.Message.ToString()); } catch (SmtpException exSmtp) //找不到 SMTP 或 其他的例外錯誤 { MessageBox.Show(exSmtp.Message.ToString()); } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } }
呼叫 MailMessage.Attachments 可取得附件的集合 AttachmentCollection 物件。 其組成項目為 Attachment 物件,可以透過該集合的 Add 方法加入新的項目。
MailMessage mailmessage = new MailMessage(); mailmessage.From = new MailAddress(txtMailFrom.Text); mailmessage.To.Add(new MailAddress(txtMailTo.Text)); mailmessage.Subject = txtSubject.Text; mailmessage.Body = txtBody.Text; mailmessage.IsBodyHtml = cbHTML.Checked; SmtpClient smtpclient = new SmtpClient(cbSMTP.Text); smtpclient.Credentials = new System.Net.NetworkCredential(txtAccount.Text, txtPassword.Text); smtpclient.EnableSsl = cbSSL.Checked; smtpclient.Port = int.Parse(txtSmtpPort.Text); string sFilePath = @"D:\MCTS\MCTS2011\Practice\Practice\bin\Debug\cloud.jpg"; Attachment attachment = new Attachment(sFilePath); mailmessage.Attachments.Add(attachment); SendMail(smtpclient, mailmessage);
Attachment 有好幾個建構子,其中一個包含一個 stream ,也就是可以將 stream 變成附件形式寄出。
// create SmtpClient SmtpClient smtpclient = new SmtpClient(cbSMTP.Text); smtpclient.Credentials = new System.Net.NetworkCredential(txtAccount.Text, txtPassword.Text); smtpclient.EnableSsl = cbSSL.Checked; smtpclient.Port = int.Parse(txtSmtpPort.Text); // create Attachment string sContent = "將資料流轉成附加檔案"; byte[] byteArray = Encoding.UTF8.GetBytes(sContent); MemoryStream stream = new MemoryStream(byteArray); Attachment attm = new Attachment(stream, "myfile.txt", MediaTypeNames.Text.Plain); // create MailMessage MailMessage mailmessage = new MailMessage(); mailmessage.From = new MailAddress(txtMailFrom.Text); mailmessage.To.Add(new MailAddress(txtMailTo.Text)); mailmessage.Subject = txtSubject.Text; mailmessage.Attachments.Add(attm); // Send SendMail(smtpclient, mailmessage);
因應某些收件者無法顯示 HTML 內容,也可以同時提供純文字和 HTML 版本的郵件內容。
// 設定一個HTML格式的 AlternateView string htmlBody = "<body><html>This message support <b>HTML</b></html></body>"; AlternateView viewHtml = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html); avHtml.LinkedResources.Add(pic1); // 設定一個文字格式的 AlternateView string textBody = "This message doesn't support HTML"; AlternateView viewPlain = AlternateView.CreateAlternateViewFromString(textBody, null, MediaTypeNames.Text.Plain); // 使用 alternate views 加入訊息主體,替代 MailMessage.Body mailmessage.AlternateViews.Add(viewHtml); mailmessage.AlternateViews.Add(viewPlain); SendMail(smtpclient, mailmessage);
透過 LinkedResource 類別,可用來建立資源連結物件,並將該物件加入 Html 格式的 AlternateView 物件中。
給定每個 LinkedResource 一個唯一的 ContentId ,再將這個 ContentId 套用到 <img> 標籤的 cid 屬性的值。
// 設定連結資源檔 string sFilePath = @"D:\MCTS\MCTS2011\Practice\PracticeMCTS\bin\Debug\cloud.jpg"; LinkedResource resource1 = new LinkedResource(sFilePath, MediaTypeNames.Image.Jpeg); resource1.ContentId = "resource_id_1"; //定義這個資源的 ContentID。 // 設定一個HTML格式的本文內容,並加入連結資源檔 string htmlBody = @" <html><body> <h1>資源內嵌</h1> <img src=""cid:resource_id_1"" /> </body></html>"; AlternateView viewHtml = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html); viewHtml.LinkedResources.Add(resource1); // 使用 alternate views 替代 MailMessage.Body mailmessage.AlternateViews.Add(viewHtml); SendMail(smtpclient, mailmessage);
<img> 標籤中的 src 屬性,其值要等於 Attachment.Name 。
// 設定附件檔 string sFilePath2 = @"D:\MCTS\MCTS2011\Practice\PracticeMCTS\bin\Debug\cloud.jpg"; Attachment attm = new Attachment(sFilePath2); attm.Name = Path.GetFileName(sFilePath2); attm.NameEncoding = Encoding.GetEncoding("utf-8"); attm.TransferEncoding = TransferEncoding.Base64; // 設定該附件為一個內嵌附件(Inline Attachment) attm.ContentDisposition.Inline = true; //附件中的內容是以內嵌方式呈現為電子郵件主體的一部分,則為 true attm.ContentDisposition.DispositionType = DispositionTypeNames.Inline; //附件類型 => 將附件顯示為電子郵件訊息主體的一部分 mailmessage.Attachments.Add(attm); // 設定一個HTML格式的本文內容,並加入附件檔 // img 標籤中的 src 屬性,其值要等於 Attachment.Name string htmlBody = @" <html><body> <h3>附件內嵌(Inline Attachment)</h3> <img src=""cloud.jpg"" /> </body></html>"; mailmessage.Body = htmlBody; SendMail(smtpclient, mailmessage);
SmtpClient sc ; private void btnSendAsync_Click(object sender, EventArgs e) { MailMessage mail = new MailMessage(); mail.From = new MailAddress(txtMailFrom.Text); mail.To.Add(new MailAddress(txtMailTo.Text)); mail.Subject = txtSubject.Text; mail.Body = txtBody.Text; mail.IsBodyHtml = cbHTML.Checked; sc = new SmtpClient(cbSMTP.Text); sc.Credentials = new System.Net.NetworkCredential(txtAccount.Text, txtPassword.Text); sc.EnableSsl = cbSSL.Checked; sc.Port = int.Parse(txtSmtpPort.Text); string sFilePath = @"D:\MCTS\MCTS2011\Practice\Practice\bin\Debug\cloud.jpg"; Attachment attm = new Attachment(sFilePath); mail.Attachments.Add(attm); sc.SendCompleted += new SendCompletedEventHandler(SendCompleted); sc.SendAsync(mail, null); } private void btnCancel_Click(object sender, EventArgs e) { sc.SendAsyncCancel(); } private void SendCompleted(object sender, AsyncCompletedEventArgs e) { if (e.Cancelled) MessageBox.Show("Message Cancelled"); else { if (e.Error != null) MessageBox.Show("Error : " + e.Error.ToString()); else MessageBox.Show("Send Completed"); } }
目的: 讀取 SQL 的欄位值 & Email 處理