-
using System.Web.Mail ;
private void Button1_Click(object sender, System.EventArgs e)
{
//實例化MailMessage對象
System.Web.Mail.MailMessage mail=new System.Web.Mail.MailMessage();
//定義郵件的發送地址, 可以隨便填一個不存在的地址,垃圾郵件就是這樣子做的吧^_^
mail.From=" [email protected] ";
//定義郵件的接收位址
//設定以分號分隔的收件者電子郵件地址列表
mail.To=" [email protected] ";
//定義郵件的暗送地址
//設定以分號分隔的電子郵件地址列表
//mail.Bcc=" [email protected] ";
//定義郵件的抄送地址
//設定以分號分隔的電子郵件地址列表
//mail.Cc=" [email protected];[email protected]
//定義郵件的主題
mail.Subject="widebright 的郵件測試asp.net發送郵件學習";
//設定電子郵件正文的內容類型
//在這裡我們以HTML的格式傳送
mail.BodyFormat=System.Web.Mail.MailFormat.Html;
//設定電子郵件的正文
mail.Body="測試一下,看行不行喲";
//用@ 引起來的字串以@ 開頭,也用雙引號引起來。例如:
//用@ 引起來的優點在於換碼序列「否」 被處理,這樣就可以輕鬆寫出字串,例如一個完全限定的檔名:
//@"c:DocsSourcea.txt " // rather than "c:\Docs\Source\a.txt"
//若要在一個用@ 引起來的字串中包含一個雙引號,請使用兩對雙引號:
// @"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain.
// @ 符號的另一種用法是使用碰巧成為C# 關鍵字的被引用的(/reference) 識別碼。
// http://msdn2.microsoft.com/zh-CN/library/362314fe(VS.80).aspx
//設定一個附件
System.Web.Mail.MailAttachment mailAttachment=new System.Web.Mail.MailAttachment(@" F:dddddd.txt");
//郵件附加上一個附件
mail.Attachments.Add(mailAttachment);
//多個附件在這裡繼續加入
mailAttachment=new System.Web.Mail.MailAttachment(@"F:asp_net 傳送郵件代碼_百度知道.mht");
mail.Attachments.Add(mailAttachment);
//SMTP伺服器,因為用的是本機架設的,所以寫127.0.0.1 , 如果連接的是其他伺服器的話,像163郵箱,要寫smpt.163.com
System.Web.Mail.SmtpMail.SmtpServer="127.0.0.1";
//說是許多SMTP伺服器都需要身分驗證,防止垃圾郵件,好像叫做擴充smpt協定什麼的。
//但這裡連接的是自己的smpt伺服器,簡單的smpt,所以也沒有什麼驗證了。
//至於從本機的SMPT伺服器再把郵件寄到163或其他信箱的時候要不要驗證就不知道了, 實測時郵件時可以發到
//@163.com , @eyou.com,@x.cn的,也不用任何驗證。
//驗證
//mail.Fields.Add(" http://schemas.microsoft.com/cdo/configuration/smtpauthenticate ", "1");
//登陸名
//mail.Fields.Add(" http://schemas.microsoft.com/cdo/configuration/sendusername ", "widebright");
//登陸密碼
//mail.Fields.Add(" http://schemas.microsoft.com/cdo/configuration/sendpassword ", "widebright");
//發送
System.Web.Mail.SmtpMail.Send(mail);
}
上面的程式碼是採用 .Net 中提供的 System.Web.Mail.SmtpMail類別來傳送郵件,自動連接
SMPT伺服器來發送郵件。以有的人是自己用TCP類,或是socket寫代碼實現smpt協議,不過那樣子要處理很多編碼啊,協議啊等,比較麻煩。我以前用VB時也做過一個,smpt協定比較簡單,不過那些附件的編碼就還要寫很多程式碼。
這裡只是smtp發信代碼而已,如果要做收信等好要pop3 伺服器提供對pop3協定的支援才行。
smtp伺服器是安裝完IIS就有的了,pop3切沒有自帶,安裝起來也會麻煩一些吧,沒試過!
SMTP伺服器的配置
我是安裝完IIS 5.1後就自己啟用了,在IIS資訊服務管理員中設定一下就可以了。
1。 在Domains 裡面增加幾個網域:右鍵當擊「Default SMTP Virtual Server」 中的Domains
選“New” 新建, -——” Domain Type 選“Remote”,
Domain name 分別填163.com eyou.com x.cn, 因為我要給這些伺服器發郵件,和上面程式碼中
===============
mail.To=" [email protected] ";
===============
相對應的,你要發送郵件給誰,就要設定相應的域名,不設定的時候郵件是發送不出去的。
2。 右鍵點選 163.com 等域名,選「屬性」 ,勾上「Allow incoming mail to be relayed to this domain」,勾上後郵件才能發送出去,否則還是有錯。
下面的Route domain 選預設的Use DNS to route to domain 就可以了。
關鍵是在IIS中要設定好對應的smtp伺服器域名,就可以發送郵件了。我在asp.net頁面上測試了好幾個郵箱都是可以正常送出去的。 像163郵箱一點按鈕發送,就會收得到了。
剛發現可以添加
*.com
*.net
*cn
網域名稱來匹配大多數的郵箱。
如增加了*.com 網域之後,就可以寄信給 @163.com ,@eyou.com了
在windows xp+ visual sutdio 2003 + iis5.1 環境下測試通過,
不過只有發現寄到新浪信箱的信件收不到,不知道為什麼。
出現SMTP典型錯誤550 5 7 1 Uable to relay
則除了domains 網域沒有設定好還有可能是
SMTP虛擬伺服器的設定中沒有選取「allow computers which successfully authenticate to relay」複選框。如下圖所示,
先開啟SMTP Virtual Server的屬性頁的Access頁:
然後點選「Relay」按鈕,看「Allow all computers which successfully authenticate to relay,regardless of the list above」是否選取: