To render a view you'll need to use a view engine and a view context. The view engine is responsible for finding and rendering a view. The view context contains information about the view and its state.
public ActionResult Index()
{
StringWriter sw = new StringWriter();
ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, "Index", "_Layout");
ViewContext context = new ViewContext(ControllerContext, result.View, ViewData, TempData, sw);
result.View.Render(context, sw);
result.ViewEngine.ReleaseView(ControllerContext, result.View);
string viewString = sw.ToString();
return Content(viewString);
}
To pass a model use ViewData
(i.e. property available from the controller).
ViewData.Model = new MailMessage();
I'd also like to highly recommend Postal and MvcMailer as alternatives to your current approach. Both of them work on the same principle of using views (such as razor) to generate emails. The setup is pretty simple and the rewards are worth it.
If your application uses a lot of emails then I'd suggest you try them.