Приложение загружается навсегда ожидая localhost когда я пытаюсь отправить электронное письмо с помощью ASP.NET MVC
После полудня,
Я делаю приложение, в котором один из модулей включает в себя отправку электронной почты из ASP.Net приложение MVC.
Вот что у меня уже есть :
//This is email creation var body = "<p>Email From: {0} ({1})</p><p>Message: Morning. This is a test trying sending emails from ASP.Net MVC. Thanks to tell me if you receive the message. </p><p>{2}</p>"; var message = new MailMessage(); //message.To.Add(new MailAddress("eunicelakloe@yahoo.fr")); message.To.Add(new MailAddress("nice55kloe@mail.com")); message.From = new MailAddress(model.FromEmail); //message.From = new MailAddress("emapong@secelgroup.com"); message.Subject = "This is a test trying sending emails with ASP.Net MVC"; message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message); message.IsBodyHtml = true; //This manages the created email sending using (var smtp = new SmtpClient()) { var credential = new NetworkCredential { UserName = "myemail@gmail.com", // replace with valid value Password = "password" // replace with valid value }; smtp.Credentials = credential; smtp.Host = "smtp-mail.outlook.com"; smtp.Port = 465; smtp.EnableSsl = true; await smtp.SendMailAsync(message); return RedirectToAction("Sent"); } } return View(model);
HTML-форма
@using (Html.BeginForm()) { @Html.AntiForgeryToken() <h4>Send your comments.</h4> <hr /> <div class="form-group"> @Html.LabelFor(m => m.FromName, new { @class = "col-md-2 control-label" }) <div class="col-md-10"> @Html.TextBoxFor(m => m.FromName, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.FromName) </div> </div> <div class="form-group"> @Html.LabelFor(m => m.FromEmail, new { @class = "col-md-2 control-label" }) <div class="col-md-10"> @Html.TextBoxFor(m => m.FromEmail, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.FromEmail) </div> </div> <div class="form-group"> @Html.LabelFor(m => m.Message, new { @class = "col-md-2 control-label" }) <div class="col-md-10"> @Html.TextAreaFor(m => m.Message, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Message) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" class="btn btn-default" value="Send" /> </div> </div> }
Я ожидаю, что письмо будет отправлено, как только я заполню форму и нажму на кнопку Отправить, но на самом деле, как только я нажму на кнопку Отправить, страница загрузится навсегда, не возвращая никакого результата.Я понятия не имею, в чем проблема.
Любая помощь будет очень приветствоваться.
Заранее спасибо!
Что я уже пробовал:
Добавление точек останова в некоторых строках контроллера, но ничто, кажется, не заставляет его работать или даже отображать какую-то ошибку.
F-ES Sitecore
Запустите локальный smtp-сервер (google для "smtp4dev"), чтобы попробовать свой базовый код. Если он работает против этого, но не с вашими фактическими значениями, то, возможно, существует сетевая проблема между вашим сервером и smtp-сервером, или то, что вы считаете "допустимыми значениями", вообще не является допустимым.
Nice Kloe
Спасибо за ваш ответ F-ES Sitecore, но мне жаль, что я не понимаю, что вы имеете в виду, когда говорите, что я должен "запустить локальный smtp-сервер (google для "smtp4dev"), чтобы попробовать ваш код basic против."
F-ES Sitecore
Существует настольное приложение под названием smtp4dev, которое вы можете запустить на своем сервере, и оно действует как smtp-сервер и покажет вам подробную информацию о любом полученном письме. Когда он запущен, установите smtp-сервер в своем коде на 127.0.0.1 (или адрес машины, на которой работает smtp4dev, если вы не можете запустить его на веб-сервере) и посмотрите, получает ли приложение smtp4dev сообщение электронной почты ok. Если это так, то ваш код в порядке, проблема заключается в сетях или настройках. Однако PROTIP, не отправляйте электронную почту через gmail, это не вызовет у вас ничего, кроме проблем, отправьте ее через smtp-сервер, предоставленный вашим администратором webhost\network.
Nice Kloe
Как уже упоминалось ранее, я скачал smtp4dev и установил, а затем протестировал свой код, и код работал как заклинание. Я получил письмо. Итак, проблема должна быть в моей сети или настройках, верно?
F-ES Sitecore
Да, либо сервер, на котором работает ваш код, физически не может подключиться к используемому вами smtp-серверу, либо у вас неверная настройка ssl, неправильный порт и т. д.
Nice Kloe
Я вижу. Скажите, пожалуйста, нужно ли мне развертывать это решение на онлайн-сервере, чтобы оно работало нормально? Я имею в виду, что, поскольку я попробовал использовать smtp4dev и он прошел, если я разверну решение на онлайн-сервере, могу ли я ожидать, что это пройдет?
F-ES Sitecore
Сервер, на котором вы его развертываете, не обязательно должен быть "онлайн" в той же степени, что и общедоступный в интернете, нет. Но он должен иметь возможность правильно взаимодействовать с целевым smtp - сервером. Если проблема, с которой вы столкнулись, заключается в том, что между вашей машиной и smtp-сервером существует брандмауэр, то эта проблема может не существовать, если сайт находится в сети, но нет никаких гарантий.
MadMyche
Вы действительно пытаетесь отправить электронную почту с адреса GMail с сервера Outlook?
Nice Kloe
Извините за это, я скопировал неправильную версию кода. Вот что я на самом деле использую : smtp.Хозяин = "smtp.gmail.com-и результат тот же самый.
Richard Deeming
message.From = new MailAddress(model.FromEmail);
Если ваш веб-сервер не уполномочен отправлять электронную почту из домена пользователя, это, вероятно, не сработает. Вам нужно будет установить
Sender
свойство к адресу электронной почты, связанному с вашей учетной записью на используемом вами SMTP-сервере.