2017-12-05 7 views
0

純粋なhtmlサイトに電子メール機能を追加しようとしています。 VS 2017でASP.Netプロジェクトを作成し、htmlファイルを追加しました。 「お問い合わせ」フォームを持つページで、jQueryを追加してWebサービスを使用して電子メールを送信しました。私はエラーを取得し続け、デバッグする方法がわからない。 Webサービスのメソッドを別々にテストしたところ、うまくいきました。これは、jQueryで何かが間違っていなければならないことを意味する電子メールを送信します。私はこれに助けを必要とし、誰かが私が見逃しているものを見つけられるかどうかを見ます。jQueryとWebサービスを使用して電子メールを送信する

実行すると、ステータスコード500が返されます。

<section id="contact" class="bg-light"> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-sm-12 ml-sm-auto col-md-10 pt-4"> 
       <h1>Contact us</h1> 

       <form id="sendmail" method="POST" action=""> 
        <div class="form-group"> 
         <input type="email" class="form-control" id="inputEmail" aria-describedby="emailHelp" placeholder="Email Address"> 
        </div> 
        <div class="form-group"> 
         <input type="email" class="form-control" id="inputName" aria-describedby="nameHelp" placeholder="First and Last Name"> 
        </div> 
        <div class="form-group"> 
         <input type="email" class="form-control" id="inputPhone" aria-describedby="phoneHelp" placeholder="Contact Number"> 
        </div> 
        <div class="form-group"> 
         <label for="inputMsg">Feedback/Questions</label> 
         <textarea class="form-control" id="inputMsg" rows="3"></textarea> 
        </div> 
        <button type="submit" id="btnSubmit" class="btn btn-primary">Submit</button> 
       </form> 
      </div> 
     </div> 
    </div> 
</section> 

<script type="text/javascript"> 
    $("#btnSubmit").click(function() { 
     debugger 
     $("#sendmail").validate(); 

     if ($("#sendmail").valid()) { 
      $.ajax({ 
       type: "POST", 
       url: "/services/easg.asmx/SendEmail", 
       cache: false, 
       contentType: "application/json; charset=utf-8", 
       data: "{ 'Msg': '" + $("#inputMsg").val() + "', " + "'To': '[email protected]'," + "'From': '" + $("#inputEmail").val() + "'," + "'Name': '" + $("#inputName").val() + "'," + "'Subject': 'Guide Feedback'," + "'Phone': '" + $("#inputPhone").val() + "'" + "}", 
       dataType: "json", 
       complete: function (transport) { 
        alert(transport.status); 
        if (transport.status == 200) { 
         alert('Your message was sent; thank you for your feedback'); 
        } 
        else { 
         alert("Failed to send feedback; please try again later. Status Code: " + transport.status); 
        } 
       } 
      }); 
     } 
     //so that the page doesn't post back 
     return false; 
    }); 
</script> 

Webサービス:

namespace EAStyleGuide 
{ 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 

    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService] 

    public class easg : System.Web.Services.WebService 
    { 

     [WebMethod] 
     [ScriptMethod(UseHttpGet = true)] 

     private void SendEmail(string Msg, string To, string From, string Name, string Subject, string Phone) 
     { 
      using (var message = new MailMessage()) 
      { 
       message.From = new MailAddress(From); 
       message.To.Add(new MailAddress(To)); 
       message.Subject = Subject; 
       message.Body = GetMailBody(From, Msg, Phone, Name); 
       message.Priority = MailPriority.Normal; 
       message.IsBodyHtml = false; 

       SmtpClient sc = new SmtpClient("mailrelay.blah.com"); 
       sc.Credentials = new NetworkCredential(); 

      try 
      { 
       sc.Send(message); 
      } 
      catch (SmtpFailedRecipientsException FRE) 
      { 
      } 
      catch (SmtpException smtpEx) 
      { 
      } 
      catch (Exception generalEx) 
      { 
      } 
     } 
     return; 
    } 

それでeasg.asmxでプロジェクトのルートにある "サービス" フォルダがあります。

+0

500エラーは、サーバー上で何かが失敗したことを意味します。サーバーからの実際の応答は何でしたか?エラーメッセージとは何ですか?サーバーに送信するデータペイロードの結果としての価値は何ですか?それは有効なJSONですか?サーバー側のコードをデバッグすると、具体的にどこが失敗するのですか? – David

+0

それは問題だDavid、私はWebサービスの "SendEmal"メソッドでブレークポイントを入れたが、私はそれを打つことはありません。 jQueryコードが悪く、Webサービスを呼び出さない、または単にWebサービスのメソッドにブレークポイントを追加するだけでは、ブレークポイントで停止するには不十分です。しかし、私はそのメソッドをクラスに入れ、いくつかの定数変数で呼び出すと、電子メールを送信したので、私のSendEmailメソッドはOKだと思います。 VSでデバッグ中にサーバーからの実際の応答を確認するにはどうすればよいですか? – NoBullMan

+0

ブラウザのデバッグツールを確認してください。そこでは、AJAX呼び出しを含む、ページに関連するHTTP要求/応答を観察できます。サーバーからの実際の応答が何であるかを確認する必要があります。 – David

答えて

1

上記の質問のコメントの結果として、いくつかのデバッグ後...

respnseTextだった "不明なWebメソッドのsendEmailは、パラメータ名:。methodNameの"

これは、そのフレームワークのISNを意味し、要求が行われたことに基づいてWebメソッドを見つけることはできません。近づいてみると、ウェブメソッドはGETリクエストに制限されるように表示されます。

[ScriptMethod(UseHttpGet = true)] 

をしかし、あなたはPOSTリクエストを作っている:

type: "POST", 

あなたは、どちらか一方を変更する必要があります。あなた次第です。

関連する問題