[翻譯]ASP.NET MVC 3 開發的20個秘訣(五)[20 Recipes for Programming MVC 3]:發送歡迎郵件

來源:互聯網
上載者:User

議題

許多網站在訪問內容或者發表評論的時候 要求使用者註冊或登入。這樣的網站越來越多,使用者非常難以記住每個他註冊過的網站以及資訊。而在使用者提交註冊資訊的時候,網站可以發送郵件,提醒使用者他們剛剛簽署過註冊資訊,方便他們稍後訪問時查詢。

 

解決方案

實現SmtpClient類和MailMessage類在使用者註冊後發送歡迎郵件。

 

討論

發送一份電子郵件,你需要配置SMTP伺服器位址、連接埠、使用者名稱和密碼。為了讓配置更加簡單,建議將這些資訊儲存到Web.config的AppSettings節點裡。

    <appSettings>

<add key="webpages:Version" value="1.0.0.0" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="smtpServer" value="localhost" />
<add key="smtpPort" value="25" />
<add key="smtpUser" value="" />
<add key="smtpPass" value="" />
<add key="adminEmail" value="no-reply@no-reply.com" />

</appSettings>

在smtpServer、smtpPort、smtpUser和smtpPass的Value中輸入可用的參數。 

為了更好的組織項目,我們將建立一個新的檔案夾來包含這些發送郵件的類。按右鍵項目選擇“添加”->“建立檔案夾”並將其命名為“Utils”。現在,按右鍵新建立的“Utils”檔案夾,選擇“添加”->"類"並命名為“MailClient.cs”。 

為了方便訪問,MailClient類被定義為靜態類,未來在與其他系統整合使用時,不需要執行個體化新的對象,直接使用即可。下面是MailClient類的完整代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
using System.Net;
using System.Configuration;

namespace MvcApplication4.Utils
{
public static class MailClient
{
private static readonly SmtpClient Client;

static MailClient()
{
Client = new SmtpClient
{
Host =
ConfigurationManager.AppSettings["SmtpServer"],
Port =
Convert.ToInt32(
ConfigurationManager.AppSettings["SmtpPort"]),
DeliveryMethod = SmtpDeliveryMethod.Network
};

Client.UseDefaultCredentials = false;
Client.Credentials = new NetworkCredential(
ConfigurationManager.AppSettings["SmtpUser"],
ConfigurationManager.AppSettings["SmtpPass"]);
}

private static bool SendMessage(string from, string to,
string subject, string body)
{
MailMessage mm = null;
bool isSent = false;

try
{
// Create our message
mm = new MailMessage(from, to, subject, body);
mm.DeliveryNotificationOptions =
DeliveryNotificationOptions.OnFailure;
// Send it
Client.Send(mm);
isSent = true;
}
// Catch any errors, these should be logged and
// dealt with later
catch (Exception ex)
{
// If you wish to log email errors,
// add it here...
var exMsg = ex.Message;
}
finally
{
mm.Dispose();
}

return isSent;
}

public static bool SendWelcome(string email)
{
string body = "Put welcome email content here...";

return SendMessage(
ConfigurationManager.AppSettings["adminEmail"],
email, "Welcome message", body);
}
}
}

在類開始的時候,從Web.Config中引用值並建立SmtpClient類執行個體。下面定義的SendMessage方法是私人方法,不能從類外部直接調用,此方法的是實際執行發送功能的方法。這個方法建立一個新的MailMessage執行個體,並通過先前建立SmtpClient對象發送。最後,建立了一個SendWelcome功能來接受使用者的電子郵件地址參數,通過調用SendMessage方法來發送歡迎郵件。 

在Account控制器中,使用者通過Register方法註冊或更新之後立即調用SendWelcome方法寄送電子郵件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using MvcApplication4.Models;
using MvcApplication4.Utils;

namespace MvcApplication4.Controllers
{
public class AccountController : Controller
{

//
// POST: /Account/Register
[HttpPost]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
MembershipCreateStatus createStatus;
Membership.CreateUser(model.UserName,
model.Password, model.Email, null, null,
true, null, out createStatus);
if (createStatus ==
MembershipCreateStatus.Success)
{
// Send welcome email
MailClient.SendWelcome(model.Email);
FormsAuthentication.SetAuthCookie(
model.UserName,
false /* createPersistentCookie */);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("",
ErrorCodeToString(createStatus));
}
}
// If we got this far, something failed,
// redisplay form
return View(model);
}

}
}

上面的代碼是一個基本的例子,實現了使用者在註冊過程中向使用者發送一封歡迎郵件。在現代社會中,自動處理表單是非常棒的點子,在以後的使用,我們可以在郵件中加入“確認您的電子郵件地址”的連結訊息,並要求使用者必須通過點擊歡迎電子郵件中的連結啟用賬戶之後,才可以登入。

 

參考

StmpClient MailMessage 原書地址 書籍原始碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.