First of all you can create controller extension method:
public static partial class ControllerExtensions
{
public static string RenderPartialViewToString(this ControllerBase controller, string partialPath, object model)
{
if (string.IsNullOrEmpty(partialPath))
partialPath = controller.ControllerContext.RouteData.GetRequiredString("action");
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialPath);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
// copy model state items to the html helper
foreach (var item in viewContext.Controller.ViewData.ModelState)
if (!viewContext.ViewData.ModelState.Keys.Contains(item.Key))
{
viewContext.ViewData.ModelState.Add(item);
}
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
Then, create a controller action method which receives SenderEmail receiverEmail.
Then create template variable
var template= this.RenderPartialViewToString("MailToSend", model);
This will convert View MailToSend into string.
After that you can use MailMessage class to send email:
SmtpClient client = new SmtpClient();
client.Host = "smtp.gmail.com"; //if your email is gmail
client.Port = 25;
client.UseDefaultCredentials = false;
client.Credentials = smtpCrede;
client.EnableSsl = true;
MailMessage message = new MailMessage();
message.From = new MailAddress(here goes email");
message.To.Add(new MailAddress(email));
message.IsBodyHtml = true;
message.Body = template;
client.Send(message);
return true;
And also declare :
private NetworkCredential smtpCrede = new NetworkCredential("your email, "your email password");
outside of action method.