En mi proyecto MVC, tengo que enviar una tabla HTML como correo electrónico al cliente.
Tengo una función de correo electrónico en una API web a la que debo llamar:
public class FunctionsController : ApiController { [HttpPost] [Route("{controller}/email")] public void SendEmail(string to, string from, string body, string subject, string bcc) { SmtpClient smtpClient = new SmtpClient(); smtpClient.Host = "xxxx"; MailMessage mailMessage = new MailMessage(); mailMessage.IsBodyHtml = true; mailMessage.Body = body; mailMessage.Subject = subject; mailMessage.From = new MailAddress(from); mailMessage.To.Add(new MailAddress(to)); mailMessage.Bcc.Add(new MailAddress(bcc)); smtpClient.Send(mailMessage); }No estoy seguro de cómo hacerlo.
Esta es mi función javascript sendEmail en mi proyecto MVC (usando Knockout):
self.sendEmail = function (to, from, body, subject, bcc) { $.ajax({ url: "../API/functions/email", type: "POST", data: { 'to': to, 'from': from, 'body': body, 'subject': subject, 'bcc' : bcc }, contentType: "application/json", success: function (data) { console.log(ko.toJSON(data)); } }); }¿Cómo debo obtener los datos POST en la API web? ¿Es correcta mi función javascript?
Gracias por adelantado.
Siempre es una mejor práctica hacer un modelo/modelo de vista.
public class EmailViewModel { public string Body { get; set; } public string Subject { get; set; } public string From { get; set; } public string To { get; set; } public string Bcc { get; set; } }Ahora el método del controlador será como:
public void SendEmail(EmailViewModel email) { ....... }y la llamada ajax será como:
var email={ 'Body': body, 'Subject': subject , 'From': from, 'To': to, 'Bcc': '' }; $.ajax({ url: "../xxx/functions/email/", type: "POST", data: email, contentType: "application/json", success: function (data) { callback(data); } });Espero que esto ayude :)
Sus campos de datos en js:
data: { 'from_email': from, 'to': to, 'autotext': 'true', 'subject': subject, 'html': body },Debe coincidir con los nombres de los parámetros de sus controladores:
public void SendEmail(string sBody, string sSubject, string sFrom, string sTo, string sBcc)Si coinciden, MVC los vinculará automáticamente.
Entonces, si desea obtener sus datos en el controlador, debe cambiar su js o la firma del controlador.
Por ejemplo, cambiemos de controlador:
public void SendEmail(string html, string subject, string from_email, string to, string sBcc)