純粋な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でプロジェクトのルートにある "サービス" フォルダがあります。
500エラーは、サーバー上で何かが失敗したことを意味します。サーバーからの実際の応答は何でしたか?エラーメッセージとは何ですか?サーバーに送信するデータペイロードの結果としての価値は何ですか?それは有効なJSONですか?サーバー側のコードをデバッグすると、具体的にどこが失敗するのですか? – David
それは問題だDavid、私はWebサービスの "SendEmal"メソッドでブレークポイントを入れたが、私はそれを打つことはありません。 jQueryコードが悪く、Webサービスを呼び出さない、または単にWebサービスのメソッドにブレークポイントを追加するだけでは、ブレークポイントで停止するには不十分です。しかし、私はそのメソッドをクラスに入れ、いくつかの定数変数で呼び出すと、電子メールを送信したので、私のSendEmailメソッドはOKだと思います。 VSでデバッグ中にサーバーからの実際の応答を確認するにはどうすればよいですか? – NoBullMan
ブラウザのデバッグツールを確認してください。そこでは、AJAX呼び出しを含む、ページに関連するHTTP要求/応答を観察できます。サーバーからの実際の応答が何であるかを確認する必要があります。 – David