最近工作需求上要寄出多封圖文並茂的系統通知信件,
為了滿足這方面需求而在網上找了些資料後,最終整理出下面這個方法。
傳入內容為HTML格式,利用HTML標記語法可以做到字型大小顏色的相關變化,
也可以插入圖片和連結,相當的方便。
' StrMailServer : MailServerIP
' StrSendFrom : 寄件人Mail地址
' StrSendFromPwd : 寄件人Mail密碼
' StrSendFromName : 寄件人Mail顯示名稱
' StrSendTo : 收件人Mail地址
' StrSendSubject : Mail標題
' StrHTMLMailBody : Mail Html內容
' LResourseArray : Mail Html內容中引用到的資源陣列(ex: img)
' AttArray : Mail 夾帶的附件資源陣列
' 回傳:錯誤訊息,""空字串代表寄信成功
public static string SendHtmlMail(string StrMailServer, string StrSendFrom,
string StrSendFromPwd, string StrSendFromName,string StrSendTo,
string StrSendSubject, string StrHTMLMailBody,
LinkedResource[] LResourseArray, Attachment[] AttArray)
{
//錯誤訊息
string StrErr = "";
MailMessage MailMsg = new MailMessage();
//寄件人
MailMsg.From = new MailAddress(StrSendFrom, StrSendFromName);
//收件人加入
try
{
MailMsg.To.Add(StrSendTo);
}
catch (Exception e)
{
StrErr = "收件人格式不對!";
return StrErr;
}
//主旨
MailMsg.Subject = StrSendSubject;
//採用HTML格式
MailMsg.IsBodyHtml = true;
//訊息內容
AlternateView htmlView= AlternateView.CreateAlternateViewFromString(StrHTMLMailBody, null, "text/html");
//HTML外部資源加入
if (LResourseArray != null)
{
foreach (LinkedResource LRele in LResourseArray)
{
htmlView.LinkedResources.Add(LRele);
}
}
//處理好的HTML訊息內容加入到Mail物件
MailMsg.AlternateViews.Add(htmlView);
if (AttArray != null)
{
//加入夾帶附件
foreach (Attachment Attele in AttArray)
{
MailMsg.Attachments.Add(Attele);
}
}
//Smtp物件設定
SmtpClient SClient = new SmtpClient();
//MailServer
SClient.Host = StrMailServer;
//MailServer Port
SClient.Port = 25;
//寄件人帳密
SClient.Credentials = new System.Net.NetworkCredential(StrSendFrom, StrSendFromPwd);
//是否加密連線
SClient.EnableSsl = false;
try
{
//寄送
SClient.Send(MailMsg);
}
catch (Exception E)
{
//釋放
MailMsg.Dispose();
MailMsg = null;
StrErr = "信件寄送失敗!";
return StrErr;
}
//釋放
MailMsg.Dispose();
MailMsg = null;
return StrErr;
}
此方法需要特別注意傳入HTML文本(StrHTMLMailBody )和引用資源(LResourseArray)的ID
ex:假設在HTML文本中有引用到圖片(<img src="cid:img1" >,cid前置詞代表 Base64 編碼)
而名稱img1必須要和引用資源ID一樣,如下
LinkedResource[] LResourseArray = new LinkedResource[1];
//參數:檔案路徑, MIME類型
LResourseArray[0] = new LinkedResource("D:\\img\\img.jpg", "image/jpg");
//ID要和HTML引用的名稱一樣
LResourseArray[0].ContentId = "img1";
//編碼
LResourseArray[0].TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
如此就可以在EMail上嵌入圖片了,但是最好盡量避免在信件引用太多資源,
引用大量資源也同時代表EMail大小的膨脹,如果又同時寄出大量信件,勢必會影響效能上運作。
如果真的需要大量圖片的場合,建議可以利用免費空間來上傳圖檔,然後HTML標記用外連方式(ex: src="http://xxx.xxx/img.jpg")來處理引用資源部分。
沒有留言:
張貼留言