開發階段寄信時將信件儲存在本機
前言
我們在開發的時候常常會需要寄信的功能,但是在開發的時候一定會一直測試,這樣我們還得準備一台 SMTP Server,而且還得一直用自己信箱收測試信,實在是很不方便的方式,其實微軟有提供一組設定可以方便我們把信儲存在本機,如此一來就可以很方便在開發時候使用,等要上正式機器的時候在改成客戶的 SMTP Server 就好囉!
實作
Web.config 設定加上如下語法:
1 2 3 4 5 6 7 |
<system.net> <mailSettings> <smtp deliveryMethod="SpecifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="D:\Mail"/> </smtp> </mailSettings> </system.net> |
而 <system.net> 是在 config 中與 <system.web> 同階層,而裡面設定的資料夾一定要先建立好,不然會發生錯誤。
設定好之後我們寄信的程式就可以如下顯示,不需要在程式中寫死 SMTP Server,而實際運作的時候也不會真的寄信出去,會在指定的目錄產生一個檔案,可以使用 Outlook 來開啟該檔案看看結果是不是和想像中的一樣。如果沒有 Outlook 的話可以把檔案改成 mht 檔案,就可以直接使用 IE 來看信件內文是否正確。
1 2 3 4 5 6 7 |
SmtpClient smtp = new SmtpClient(); MailMessage msg = new MailMessage(); msg.From = new MailAddress("test@test.com","寄件者"); // 寄件者 msg.To.Add(new MailAddress("test@test.com", "收件者")); //收件者 msg.Subject = "主旨"; // 主旨 msg.Body = "內文"; // 內文 smtp.Send(msg); |
而之後我們要上正式機的時候只需要把設定改成下面的語法就可以設定正式要寄信的 SMTP Server 了
1 2 3 4 5 |
<smtp deliveryMethod="Network"> <network defaultCredentials="false" host="Your.SMTP.Server" port="25" userName="Account" password="Password" /> </smtp> |
注意事項
在 ASP.Net MVC3 有多一個 WebMail 的 Helper,可以更簡化寄信的程式碼,但是在使用的時候有一點要注意一下,需要指定 SMTP Server 為 localhost ,不然的話會出現沒有指定 SMTP Server 的錯誤。
1 2 3 |
WebMail.SmtpServer = "localhost"; WebMail.From = "test@test.com"; WebMail.Send("test@test.com", "主旨", "內文"); |
不過這樣的話不就會沒有彈性,因此可以在加上一組 appSettings 設定,就可以方便我們在 Web.config 切換了。
結論
寄信功能在開發網頁的時候很常會使用到,配合這樣的方式可以方便我們開發測試又不需要一直收信和準備 SMTP Server,真的是方便多了,如果不是開發網頁程式的話,也可以在 app.config 加上這一段設定,也一樣可以達到這樣的結果,需要的朋友也可以試看看囉!
參考資料
ASP.NET 的 SMTP 參數寫在 Web.Config 裡以簡化程式碼
Leave a comment