asp.net 發送郵件代碼
說到發送郵件發送,先提一下SMTP。 SMTP的全稱是“Simple Mail
Transfer Protocol”,即簡易郵件傳輸通訊協定。它是一組用於從源地址到目的地址傳輸郵件的規範,通過它來控制郵件的中轉方式。SMTP
協議屬於 TCP/IP 協議簇,它協助每台電腦在發送或中轉信件時找到下一個目的地。SMTP 伺服器就是遵循 SMTP 協議的發送郵件伺服器。
再簡單介紹一下名稱空間(NameSpace)System.Web.Mail類庫裡所提供的郵件發送的對象、屬性和方法
(1)它有三個類:SmtpMail、MailMessage和MailAttachment。這三個對象本文的樣本程式碼中都應用到了!
1. MailMessage ,提供屬性和方法來建立一個郵件訊息對象。
(Provides properties and methods for constructing an e-mail message.)
2. MailAttachments – 提供屬性和方法來建立一個郵件附件對象。
(Provides properties and methods for constructing an e-mail attachment.)
3. SmtpMail – 提供屬性和方法通過使用windows 2000 CDOSYS 的訊息組件的聯合資料對象來發送郵件訊息)。
(Provides properties and methods for sending messages using the
Collaboration Data Objects for Windows 2000 (CDOSYS) message component)
(2)各個類的屬性。
1.先簡單介紹SmtpMail的屬性: SmtpServer -- SMTP的地址。
2.主要來介紹MailMessage對象的屬性
From -- 發送郵件的地址
To -- 接受郵件的地址
Subject -- 郵件的標題
Priority -- 郵件的優先順序(有效值為High,Low,Normal)
Attachments -- 返回一個集合,代表附件
Bcc -- 密送地址
Cc -- 抄送地址
Body -- 擷取或是設定電子郵件訊息的內容
BodyFormat -- 擷取或是設定MailFormat的枚舉值,此值指定訊息體郵件的格式(Html格式、Text格式)
Bodyencoding -- 指定訊息的編碼方式編碼(主要有Base64,UUencode)
其他幾個不重要的省略。 隨便提到密送和抄送的區別:密送就是你群發郵件時收郵件的人無法看到你發給了多少人以及他們的郵件地址,抄送就是群發郵件時收郵件的人則可以看到你發給了多少人以及他們的郵件地址。
(3)SmtpMail類的Send方法,它的目的就是發送郵件,有兩個重載方法。
1. SmtpMail.Send("發送郵件的地址","接受郵件的地址","郵件的標題","郵件訊息的內容") 這個方法很簡單,不適合發送帶附件的郵件。
2. SmtpMail.Send(MailMessage)
此方法複雜、靈活,適合發送附件,而且可以設定MailMessage對象的各種屬性值。
如果我們用ASP.NET寫一個郵件發送的程式,那麼首先應該如何得到SMTP。有兩種方法:第一種方法調用目前知名的郵件服務提供者的SMTP,比如新
浪、搜狐、網易的免費電子郵箱的SMTP;第二種方法是自己裝一個SMTP虛擬伺服器,這個在安裝IIS時一起裝上去的(安裝過程就省略了:-) )。
一、在ASP.NET利用知名的郵件服務提供者的SMTP來發送郵件
首先需要去他們的郵件網站上註冊免費郵箱,因為你要使用郵件服務提供者的SMTP,他們需要對身份進行驗證,這樣可以避免產生大量的垃圾郵件。假設我們在
新浪的郵件網站(mail.sina.com.cn)上註冊了一個免費電子郵件,使用者名稱是fei_880221,密碼是520520.我們在新浪的郵件站
點獲知它的SMTP地址是:smtp.sina.com.cn。我們需要向56381234@@qq.com發送郵件。那麼利用ASP.NET(C#)發送郵件的核心代碼如下:
using System.Web.Mail;
MailMessage objMailMessage;
MailAttachment objMailAttachment;
// 建立一個附件對象
objMailAttachment = new MailAttachment( "d://test.txt" );//發送郵件的附件
// 建立郵件訊息
objMailMessage = new MailMessage();
objMailMessage.From = "mailto:fei_880221.com%22;//源郵件地址
objMailMessage.To = "mailto:563812344@qq.com";//目的郵件地址
objMailMessage.Subject = "郵件發送標題:你好!";//發送郵件的標題
objMailMessage.Body = "郵件發送標內容:測試一下是否發送成功!";//發送郵件的內容
objMailMessage.Attachments.Add( objMailAttachment );//將附件附加到郵件訊息對象中
//接著利用sina的SMTP來發送郵件,需要使用Microsoft .NET Framework SDK v1.1和它以上的版本
//基本許可權
objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
//使用者名稱
objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "fei_880221") ;
//密碼
objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "520520");
/如果沒有上述三行代碼,則出現如下錯誤提示:伺服器拒絕了一個或多個收件者地址。伺服器響應為: 554 : Client host rejected: Access denied
//SMTP地址
SmtpMail.SmtpServer = "smtp.sina.com.cn";
//開始發送郵件
SmtpMail.Send( objMailMessage );
二、在ASP.NET利用原生SMTP虛擬伺服器的SMTP來發送郵件
首先說一下SMTP配置。
(1)右鍵點擊“SMTP虛擬伺服器”選擇“屬性”->在“常規”選項卡中設定“IP地址(P)”,我設定的是192.168.1.1。
(2)選擇“訪問”選項卡,點擊“中繼”,選上“僅以下列表”(預設是被選上的),點擊“添加”,在“單台電腦”中加入192.168.1.1。
提示,如果沒有完成(2),則會出現大家常見的一種錯誤提示:伺服器拒絕了一個或多個收件者地址。伺服器響應為: 550 5.7.1 Unable to relay for 563812344@qq.com
using System.Web.Mail;
MailMessage objMailMessage;
MailAttachment objMailAttachment;
// 建立一個附件對象
objMailAttachment = new MailAttachment( "d://test.txt" );//發送郵件的附件
// 建立郵件訊息
objMailMessage = new MailMessage();
objMailMessage.From = "mailto:fei_880221@sina.com;//源郵件地址
objMailMessage.To = "mailto:563812344@qq.com";//目的郵件地址
objMailMessage.Subject = "郵件發送標題:你好!";//發送郵件的標題
objMailMessage.Body = "郵件發送標內容:測試一下是否發送成功!";//發送郵件的內容
objMailMessage.Attachments.Add( objMailAttachment );//將附件附加到郵件訊息對象中
//SMTP地址
SmtpMail.SmtpServer = "192.168.1.1";
//開始發送郵件
SmtpMail.Send( objMailMessage );
下面是我自己在項目中作的一個真實的例子,相當於上面的第二個方法!上面也是看到一篇blog然後篡改過來的。。。呵呵!~
1.首先到匯入命名空間
/// <summary>
/// Register後發送郵件
/// </summary>
/// <param name="email"></param>
/// <param name="customer"></param>
public void RegisterSend(string emailAddress,string userName,string userPass)
{
MailMessage objMailMessage;
//建立郵件訊息
objMailMessage = new MailMessage();
//發送地址
objMailMessage.From = "xinuo_keji@163.com";
//接收地址
objMailMessage.To = emailAddress;
//設定郵件內文內容的類型,這裡因為是需要在內容中寫條超串連,所以需要html格式
objMailMessage.BodyFormat = MailFormat.Html;
//郵件主題
objMailMessage.Subject = "西諾科技感謝您的使用!";
//郵件內容
objMailMessage.Body = "請點擊以下串連進行註冊確認!<br><a
href='http://localhost:1055/CMS/RegistorReturn.aspx?un="+userName+"&
up="+userPass+"'>點擊此處</a>";
//伺服器端的ip,因為我們用的是本地的虛擬smtp伺服器,所以只需要填寫本地ip地址
SmtpMail.SmtpServer = "192.168.0.114";
//發送
SmtpMail.Send(objMailMessage);
}
第二號種方法我成功但他總是會發到油箱的垃圾郵件裡!
------------------------------------------------------------------------------------------------------
全文完
URL: http://blog.csdn.net/lanlan520/archive/2007/07/27/1710859.aspx