2016-09-07 7 views
0

MVCで作成しているWebプロジェクトで、私のホームページにAjax電子メールフォームがあります。フォームを送信してから、メッセージを送信する前にプロンプ​​トを表示し、何もしないか、フォームを消去して、メッセージの正常な配信をユーザーに通知します。その代わりに、フォームを送信すると、私が返信した失敗メッセージとそれ以外のものを含む「ページ」に送られます。MVCホームページのAjax電子メールフォームが失敗する

これはビューのフォーム部分です。

@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> 
    } 

これは、ホームコントローラに電子メール機能を呼び出します。

[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; 
    } 

モデルは非常に単純なモデルである:プログラムが失敗する理由を私は知らない

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; } 
} 

これについては、私はカップルの人々がしばらく待っていた、これはパズルの最後の部分です。助けてください。

編集:私は小さなテストプロジェクトにこの同じ構成データを入れて、電子メールがなかった私は、電子メールを送信する方法を考え出すたとき

<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> 

:に関するSMTPの設定は、私は、Web.configファイルでこれを持っています問題なく送ったしかし、私の主な、本当のプロジェクトでは、これらの設定は、常にメッセージを送信できず、失敗メッセージを示すポップアップを表示するのではなく、メッセージだけで新しいページに私を送信する機能には影響しません。

答えて

0

私はいくつかの改善だったここでは、電子メールを送信するときに、あなたがSmtpClient初期化に関するSendEmailMessageメソッド内のいくつかの重要な設定を見逃していることがわかった:

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()) 
     { 
      //--- add these lines to define your e-mail provider 
      smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 

      // set your SMTP server address here 
      smtp.Host = "smtp.server.net"; 

      // use port number depending on your server SMTP port, e.g. 25, 465, 587, 2525 
      smtp.Port = 587; 

      // provide username & password for email access 
      smtp.Credentials = new NetworkCredential("serverusername", "serverpassword"); 

      // additionally, enable SSL if your email server supports secure connection 
      smtp.EnableSsl = true; 
      //--- end of added lines 

      smtp.Send(msg); 
     } 
    } 
    catch(Exception) 
    { 
     return false; 
    } 
    return true; 
} 

ローカルサーバー上のピックアップディレクトリ構成を持っている場合は、SmtpDeliveryMethod.PickupDirectoryFromIisSmtpDeliveryMethod.Networkを変更。

+0

私はWeb.configファイルにそのことがありました。配送方法を除くすべて。私は設定ファイルに同じ設定の別のプロジェクトを持っていて、メールはうまく送られました。 – MVCNovice

関連する問題