Nice Kloe Ответов: 1

Приложение загружается навсегда ожидая 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-сервере.

1 Ответов

Рейтинг:
1

MadMyche

Самые распространенные проблемы, которые я видел с gmail, это

1. Google не распознает соединение, используемое для конкретной используемой учетной записи электронной почты. Самое лучшее, что можно сделать, это пойти к ним. Активность Входа В Систему Пейдж и скажите им в основном, что "да, это был я"
Вход в систему - Аккаунты Google[^]

2. Google по умолчанию блокирует SMTP-доступ под предлогом того, что он менее безопасен. Существует возможность разрешить "менее безопасные приложения", которые разрешат доступ по протоколу SMTP
Настройки учетной записи: Ваш браузер не поддерживается.[^]


Nice Kloe

Согласно пункту 1, Google отправил мне электронное письмо с предупреждением о безопасности, и я подтвердил, что эта активность была от меня
Согласно пункту 2, я просто попытался разрешить менее безопасным приложениям иметь доступ к моей учетной записи, но в итоге получил тот же результат : приложение ASP загружается навсегда.