在完成《MVC應用程序請求密碼的功能(一)》http://www.cnblogs.com/insus/p/3471534.html之后,如果你照着做,所有請求只會列在MailingList表中,並沒發送出去。
Insus.NET現在就繼續下去,讓這個功能能盡量完美下去。
在上一篇中,有一個存儲過程:
在這個存儲過程#38與#39行代碼,是一個超鏈接,它是真正存在MVC的應用程序中。也就是說,給會員發送郵件時,就是把這個鏈接的視圖發送至會員的郵箱中。因此,我們得創建這個視圖。
創建這個視圖,得先創建一個Model,是為了方便在這個視圖中能顯示動態數據。
去控制器MemberController.cs添加一個視圖ActionResult:
創建視圖:
這個視圖即是郵件內容。這些內容你完全可以自定制,在此僅供參考。
現在我們要處理MailingList這個表的數據了,這個表的數據,就是會員請求密碼時,產生的一筆記錄。每一筆記錄,即是要向會員發送電子郵件。這個可以寫一個存儲過程,時行分發它們:
先是創建了一個臨時表,把所有記錄的插入至這個臨時表中,然后去刪除剛才插入臨時表相同的記錄。最后是臨時表LEFT JOIN 郵件參考表一起返回給MVC應用程序。在應用程序的Entities目錄,創建一個實體:
接下來的實現,也可算是本篇的重點,就是MVC應用程序自動執行發送郵件的功能:
去Insus.NET的博客,打開http://www.cnblogs.com/insus/archive/2010/03/16/1687688.html 下載InsusMailUtility 然后參考至MVC的應用程序中:
在MVC應用程序中的App_Start目錄,寫AutomationTask.cs:
此時,還需要修改Global.asax文件,添加下圖高亮行代碼。
這樣只要應用程序運行,AutomationTask.cs也會自動執行。現在可以演示一下了,先去修改一個測試會員的郵箱,改為真實郵箱:
然后再跟第一篇最后一個演示一樣,使用這個會員帳號請求一次密碼,然后打開郵箱,就會看到收到的郵件:
會員只要點擊那超鏈接,將導向重置密碼的視圖。現在我們需要寫重置密碼的功能,先創建一個存儲過程:
先是判斷此token是否存在或是是否過期,如果沒有,以token找到帳號與郵箱。然后更新密碼,最后是刪除ChangeRequestPassword記錄。過期的均刪除,修改密碼成功的也刪除。
在Entities目錄下,創建一個SecurityEntity.cs:
修改控制器MemberController.cs添加一個ActionResult和一個JsonResult:





