Auf einem Web-Projekt, das ich in MVC mache, habe ich ein Ajax-E-Mail-Formular auf meiner Homepage. Ich möchte, dass das Formular den Benutzer vor dem Senden der Nachricht auffordert, und dann entweder nichts tut oder das Formular löscht und den Benutzer über die erfolgreiche Zustellung der Nachricht informiert. Stattdessen sendet mich das Senden des Formulars immer an eine "Seite", die die fehlgeschlagene Nachricht enthält, die ich zurückschicke, und nichts anderes.Ajax E-Mail-Formular in MVC-Homepage schlägt fehl
Dies ist der Formularbereich der Ansicht.
@using (Ajax.BeginForm("SendEmailJson", new AjaxOptions
{
Confirm = "Send email?",
OnSuccess = "MessageSent",
OnFailure = "MessageSent"
}))
{
<div class="form-group">
@Html.Label("Name")
@Html.TextBox("FromName")
</div>
<div class="form-group">
@Html.Label("Address")
@Html.TextBox("FromEmail")
</div>
<div class="form-group">
@Html.Label("Message")
@Html.TextArea("Message", "", 5, 15, new { })
</div>
<div class="form-group">
<input type="submit" value="Send" class="btn btn-default" />
</div>
}
Diese ruft dann die E-Mail-Funktion in der Heimsteuerung:
[HttpPost]
public JsonResult SendEmailJson(EMailViewModel model)
{
string msg;
if (ModelState.IsValid)
{
bool suc = SendEmailMessage(model);
msg = suc ? "Message sent" : "Error sending message. Please try again";
}
else
msg = "An error occurred in the submission of this message. Please try again.";
return Json(msg);
}
private bool SendEmailMessage(EMailViewModel model)
{
try
{
var body = "Email from: {0} ({1})\n\nMessage:\n{2}";
var msg = new MailMessage();
msg.To.Add(new MailAddress("[email protected]"));
msg.From = new MailAddress(model.FromEmail);
msg.Subject = "Contact from " + model.FromEmail + " through MyWebSiteName";
msg.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
using (var smtp = new SmtpClient())
{
smtp.Send(msg);
}
}
catch(Exception)
{
return false;
}
return true;
}
Das Modell ist ein sehr einfaches Modell:
public class EMailViewModel
{
[Required]
[Display(Name = "Name")]
public string FromName { get; set; }
[Required]
[Display(Name = "Address")]
public string FromEmail { get; set; }
[Required]
[Display(Name = "Message")]
[DataType(DataType.MultilineText)]
public string Message { get; set; }
}
Ich weiß nicht, warum das Programm fehlschlägt Aber ich habe ein paar Leute warten lassen, und das ist das letzte Puzzleteil. Bitte helfen Sie.
EDIT: über SMTP-Einstellungen, ich habe dies in der Datei Web.config:
<system.net>
<mailSettings>
<smtp from="[email protected]">
<network host="smtp.gmail.com"
port="587"
userName="[email protected]"
password="dummyPW"
enableSsl="true" />
</smtp>
</mailSettings>
</system.net>
Als ich herauszufinden, wie E-Mails senden ich diese gleichen Konfigurationsdaten in ein kleines Testprojekt setzen und E-Mails waren ohne Problem gesendet. In meinem eigentlichen Projekt haben diese Einstellungen jedoch keinen Einfluss darauf, dass die Funktion immer die Nachricht nicht senden kann. Sie senden mir auch eine neue Seite mit der Nachricht, anstatt mir ein Popup mit der Fehlermeldung zu geben.
Ich hatte dieses Zeug in der Datei Web.config. Alle außer der Liefermethode. Ich hatte ein anderes Projekt mit den gleichen Einstellungen in der Konfigurationsdatei und E-Mails wurden gut gesendet. – MVCNovice