Don't call SmtpClient.SendMail directly within your controller actions because it directly couples your controller to SmtpClient.
Don't even create an interface IMailer and wrapping implementation of this to SmtpClient.
Instead, create a new ActionResult subclass called EmailResult. Make this class have the properties From, To, Subject and BodyData. In the ExecuteResult method use the ViewEngine infrastructure to render a view of the BodyData into your own StringWriter. You can then send the resulting content via email using SmtpClient.
Read More..