jquery - 无法发送电子邮件 - Azure MVC 站点在尝试通过控制器将表单发布到 ajax 请求时从 jquery.min.js:2 返回 404
问题描述
今晚部署一个网络应用程序。为什么找不到 /contact,我尝试了 fullurl.com/contact 和其他想法,但文件在那里,页面上的提交按钮一直告诉我不是。您是否发现以下可能导致此问题的任何问题?
在我使用新的 smtp 凭据重新部署之前,它运行良好。我可能错过的任何 azure 部署步骤会导致它在发布请求中找不到 /contact?
来自网站的错误:
contact 404 xhr jquery.min.js:2 222 B 44 ms
send @ jquery.min.js:2
ajax @ jquery.min.js:2
(anonymous) @ contact:381
家庭控制器.cs:
[HttpPost]
[Route("contact")]
public JsonResult SendContactEmail(string name, string email, string message, string phone, string bot)
{
if (string.IsNullOrWhiteSpace(email) || string.IsNullOrWhiteSpace(message) || string.IsNullOrWhiteSpace(name))
{
return Json(false);
}
if (string.IsNullOrEmpty(bot))
{
string subject = String.Format("{0} my contact form", "");
string messageBody = "<html><body style=\"font-family: Segoe UI, Helvetica, sans-serif;\">";
var sb = new StringBuilder();
sb.Append("Name: " + name);
sb.Append("<br />");
sb.Append("Email: " + email);
sb.Append("<br />");
sb.Append("Phone number: " + phone);
sb.Append("<br />");
sb.Append("Message: " + message);
sb.Append("<br /> ");
messageBody += sb.ToString();
EmailHelper.SendEmail(new EmailInfo
{
Body = messageBody,
FromName = "my name",
Subject = subject,
ToAddresses = new StringCollection { "myemail@email.com" }
}, "");
}
return Json(true);
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
public class EmailInfo
{
public string FromName { get; set; }
public StringCollection ToAddresses { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
public class EmailHelper
{
public static bool SendEmail(EmailInfo emailInfo, string attachmentPath)
{
//TODO: From Email information -- Needs to be your email account username and password
string smtpMailServer = "smtp.sendgrid.net";
string smtpUserName = "account";
string smtpPassword = "key";
int smtpPort = 587;
var oMailMessage = new MailMessage();
var fromMailAddress = new MailAddress(smtpUserName, "my addy");
oMailMessage.From = fromMailAddress;
oMailMessage.IsBodyHtml = true;
oMailMessage.Priority = MailPriority.High;
oMailMessage.Subject = emailInfo.Subject;
oMailMessage.Body = emailInfo.Body;
foreach (string to in emailInfo.ToAddresses)
{
oMailMessage.To.Add(to);
}
var oSmtpClient = new SmtpClient(smtpMailServer, smtpPort);
oSmtpClient.Credentials = new NetworkCredential(smtpUserName, smtpPassword);
oSmtpClient.EnableSsl = false;
try
{
oSmtpClient.Send(oMailMessage);
return true;
}
catch (Exception ex)
{
Console.Write(ex.Message);
return false;
}
}
}
}
/contact 页面上出现的 Ajax 脚本:
document.querySelector("form").addEventListener("submit", function (e) {
e.preventDefault();
$.ajax({
type: 'post',
url: '/contact',
data: $(this).serialize(),
success: function (res) {
$(window).scrollTop(350);
if (res) {
$(".contact-form").html("<h3 style='color: #c2ae79; text-align: center' class='wow fadeInUp' data-wow-duration='1s'>Thank you for contacting us! We will be in touch shortly.</p>");
} else {
$(".contact-form").prepend("<h3 style='color: red; text-align: center'>Please check all required fields.</p>");
}
}
});
});
解决方案
sendgrid 的帐户必须始终是“apikey”
//TODO: From Email information -- Needs to be your email account username and password
string smtpMailServer = "smtp.sendgrid.net";
string smtpUserName = "account";
string smtpPassword = "key";
int smtpPort = 587;
因此,当您将其转换为电子邮件构造函数时:
var fromMailAddress = new MailAddress(smtpUserName, "my addy");
它会引发错误,如果您在实时网站上的已编译二进制文件中执行此操作,则会引发 404。
您可以在控制器文件中使用断点和 localhost 以查看更准确的错误消息。
更改电子邮件构造函数以接受实际电子邮件可解决此问题。
推荐阅读
- ios - iOS [[MPMediaQuery playlistsQuery] collections] 在第一次运行时返回“播放历史”
- c - 运行时错误:加载“int”类型的空指针
- javascript - 如何使用 Formik 和 React 实现可添加字段?
- python - 我如何使用for循环继续添加数字
- javascript - 从 codepen 导出时,此 javascript 将不起作用。代码必须在一页中运行
- c - 将 C 变量的值赋给 bash 变量
- c# - 如何以精确的间隔发送数据包
- jenkins-pipeline - 管道正在与多分支管道工作相同的项目不工作
- c# - 为什么不从包含另一个程序集错误的内部抽象方法的类继承?
- android - 使用 WallpaperService 根据用户选择的频率设置壁纸