使用C#傳送郵件

iteye_20683發表於2009-12-17

最近有使用者提出了一個新的需求,希望公司的ERP系統在交易申請書被批准以後自動發郵件到相關人員的郵箱中,讓他們能第一時間知道。因為他們不想多打一次電話,也不願意每天都開著ERP,但是他們的Outlook能每5分鐘自動掃描一次新郵件跳出提醒。使用者的需求並不過分,所以我就接下來了。

在VS2003中有一個專門的 System.Web.Mail 類用來處理,使用還是很簡單的,以前就寫過。

VS2005中做了升級,用一個新的 System.Net.Mail 類,由於我最近剛好在學習VS2005,所以拋棄了以前的那個程式,現學現賣就是想秀秀技術,其實也沒什麼技術含量的。

MailAddress from = new MailAddress("gaosheng@hotmail.com", "高升"); //郵件的發件人

MailMessage mail = new MailMessage();

//設定郵件的標題
mail.Subject = txtSubject.Text;

//設定郵件的發件人
//Pass:如果不想顯示自己的郵箱地址,這裡可以填符合mail格式的任意名稱,真正發mail的使用者不在這裡設定,這個僅僅只做顯示用
mail.From = from;

//設定郵件的收件人
string address = "";
string displayName = "";
/**//* 這裡這樣寫是因為可能發給多個聯絡人,每個地址用 ; 號隔開
一般從地址簿中直接選擇聯絡人的時候格式都會是 :使用者名稱1 ; 使用者名稱2 ;
因此就有了下面一段邏輯不太好的程式碼
如果永遠都只需要發給一個收件人那麼就簡單了 mail.To.Add("收件人mail");
*/
string[] mailNames = (txtMailTo.Text + ";").Split(';');
foreach (string name in mailNames)
...{
if (name != string.Empty)
...{
if (name.IndexOf(' 0)
...{
displayName = name.Substring(0, name.IndexOf(' address = name.Substring(name.IndexOf('', ' ');
}
else
...{
displayName = string.Empty;
address = name.Substring(name.IndexOf('', ' ');
}
mail.To.Add(new MailAddress(address, displayName));
}
}

//設定郵件的抄送收件人
//這個就簡單多了,如果不想快點下崗重要檔案還是CC一份給領導比較好
mail.CC.Add(new MailAddress("Manage@hotmail.com", "尊敬的領導");

//設定郵件的內容
mail.Body = txtBody.Text;
//設定郵件的格式
mail.BodyEncoding = System.Text.Encoding.UTF8;
mail.IsBodyHtml = true;
//設定郵件的傳送級別
mail.Priority = MailPriority.Normal;

//設定郵件的附件,將在客戶端選擇的附件先上傳到伺服器儲存一個,然後加入到mail中
string fileName = txtUpFile.PostedFile.FileName.Trim();
fileName = "D:/UpFile/" + fileName.Substring(fileName.LastIndexOf("/") + 1);
txtUpFile.PostedFile.SaveAs(fileName); // 將檔案儲存至伺服器
mail.Attachments.Add(new Attachment(fileName));

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;

SmtpClient client = new SmtpClient();
//設定用於 SMTP 事務的主機的名稱,填IP地址也可以了
client.Host = "smtp.hotmail.com";
//設定用於 SMTP 事務的埠,預設的是 25
//client.Port = 25;
client.UseDefaultCredentials = false;
//這裡才是真正的郵箱登陸名和密碼,比如我的郵箱地址是 hbgx@hotmail, 我的使用者名稱為 hbgx ,我的密碼是 xgbh
client.Credentials = new System.Net.NetworkCredential("hbgx", "xgbh");
client.DeliveryMethod = SmtpDeliveryMethod.Network;
//都定義完了,正式傳送了,很是簡單吧!
client.Send(mail);
以前用 System.Web.Mail 類也寫過一個類似的,現在也貼出來吧,畢竟以前學習的時候也花了不少心血的

//用 System.Web.Mail 的寫法
MailMessage mail = new MailMessage();
mail.To = txtMailTo.Text; //收件人,多個收件人用 ; 號隔開,很是靈活
mail.Subject = txtSubject.Text; //主題
mail.Body = txtBody.Text; //內容
mail.BodyFormat = MailFormat.Html;
mail.Priority = MailPriority.Normal;
//顯示的發件人
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendemailaddress", "gaosheng@hotmail.com");
//實際發件人
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpaccountname", "hbgx@hotmail.com");
//使用者名稱
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "hbgx");
//密碼
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "xgbh");
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //驗證級別

SmtpMail.SmtpServer = "smtp.hotmail.com";
SmtpMail.SmtpServer.Insert(0, "smtp.hotmail.com");
SmtpMail.Send(mail);

是不是以前的寫法靈活多了,當然現在也可以用了,因為在不同的名稱空間裡面所以使用上不會有衝突,不過升級了總有他的理由,兩個類之間用法還是有很多區別的,使用的時候要注意。

我是做開發的,不是專門的講師,寫錯的地方還批評指正,在CSDN上發訊息、留言或mail都行 不勝感激!

好了,要學的東西還很多,就到這裡了學習去了。

相關文章