在我的MVC项目中,我必须将HTML表格作为电子邮件发送给客户端。
我在Web API上有一个电子邮件功能,我应该调用它:
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);
}
我不确定该怎么做。
这是我的MVC项目上的sendEmail javascript函数(使用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));
}
});
}
我应该如何在Web API中获取POST数据? 我的javascript功能是否正确?
提前致谢。
答案 0 :(得分:8)
制作模型/视图模型总是更好的做法。
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; }
}
现在控制器方法将如下:
public void SendEmail(EmailViewModel email)
{
.......
}
和ajax调用将是:
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);
}
});
希望这会有所帮助:)
答案 1 :(得分:4)
您在js中的数据字段:
data: {
'from_email': from,
'to': to,
'autotext': 'true',
'subject': subject,
'html': body
},
应匹配您的控制器参数名称:
public void SendEmail(string sBody, string sSubject, string sFrom, string sTo, string sBcc)
如果匹配,MVC将自动绑定它们。
因此,如果您想在控制器中获取数据,则应更改控制器签名的js。
例如,让我们改变控制器:
public void SendEmail(string html, string subject, string from_email, string to, string sBcc)