Не могу отправить почту из MVC

Я пытаюсь отправить электронное письмо через MVC. Я специально говорю MVC, потому что тот же код (который довольно общий для Net.Mail) работает в приложении Windows Forms, а не в MVC.

Я гуглил и пробовал разные настройки, но безуспешно. Я думаю, что это может быть проблема с MVC или какой-либо платформой, которую я использую.

SmtpClient smtp = new SmtpClient();
smtp.Port = Convert.ToInt16(ConfigurationManager.AppSettings["mailPort"]);
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["mailAccount"], ConfigurationManager.AppSettings["mailPassword"]);
smtp.Host = ConfigurationManager.AppSettings["mailHost"];
smtp.Timeout = (20 * 1000);

MailMessage mail = new MailMessage();
mail.IsBodyHtml = true;
mail.From = new System.Net.Mail.MailAddress(ConfigurationManager.AppSettings["mailAccount"]);
mail.To.Add(new MailAddress(item.Recipient));
mail.Subject = item.Subject;
mail.Body = item.Body;

smtp.Send(mail);

Все, что мне нужно, это способ отправки писем из MVC

Обновление: ошибка, которую я получаю:

[Обновление] Мои выводы:

На Thunderbird я использую порт 587 с STARTTLS.

Platform    Port    SSL Result
MVC         587 true    Error
MVC         587 false   got mail
MVC         465 true    Time out
MVC         465 false   Time out

WinForm     587 true    got mail
WinForm     587 false   got mail
WinForm     465 true    Time out
WinForm     465 false   Time out

Любые идеи

Не могу отправить почту из MVC не описывает проблему. Очень маловероятно, что произойдет тихий сбой, поэтому либо вы перехватываете и отбрасываете ошибку, либо код никогда не запускается, либо SMTP-сервер по какой-то причине не отправляет электронное письмо дальше.


person F34R    schedule 02.08.2019    source источник
comment
Вы получаете какие-либо ошибки? вы не описали точную природу проблемы, с которой вы столкнулись?   -  person Llama    schedule 02.08.2019
comment
Извинения, обновлены соответственно.   -  person KJSR    schedule 02.08.2019
comment
этот ответ является хорошим общим описанием возможных причин вашего сообщения об ошибке (я только что погуглил ошибку, ее легко найти ). Итак, первое, что я бы сделал, это проверить, что почтовый сервер действительно работает, проверить, используете ли вы правильный порт и проверить, не блокирует ли ваш маршрут брандмауэр.   -  person F34R    schedule 02.08.2019
comment
Если вы используете Google, также см. remot">этот ответ   -  person ADyson    schedule 02.08.2019
comment
@ADyson ADyson Я пройду через это, но это не сервер. Как уже упоминалось, точно такой же код работает в приложении Windows Forms без каких-либо проблем.   -  person Llama    schedule 02.08.2019
comment
@Джон Не гуглите. Это мой собственный домен.   -  person F34R    schedule 02.08.2019
comment
И имеют ли _1_ и _2_ точно те же значения, что и в приложении WinForms?   -  person F34R    schedule 02.08.2019
comment
@Джон Точно! Это кривая мяч я получаю. Возможно, ConfigurationManager.AppSettings[] немного меняет значения?   -  person Llama    schedule 02.08.2019
comment
Вы запускаете этот код на том же компьютере, что и приложение Windows Forms? Если нет, то ищите различия, например. брандмауэры, доступные сетевые маршруты, правила почтового сервера о разрешенных IP-адресах и тому подобное.   -  person F34R    schedule 02.08.2019
comment
ConfigurationManager.AppSettings[] не изменит никаких значений, нет, это просто строки. MVC использует его точно так же, как приложение Forms.   -  person ADyson    schedule 02.08.2019
comment
Попробуйте отправить письмо с помощью gmail, если это сработает, вы будете знать, что код работает и есть что-то, связанное с настройками вашего домена.   -  person ADyson    schedule 02.08.2019
comment
Можете ли вы _1_ исключить проблемы с SSL/TLS.   -  person drinu16    schedule 02.08.2019
comment
@Adyson Та же машина в моей среде разработки   -  person phuzi    schedule 02.08.2019
comment
Вы проверили, что приложение winforms в настоящее время работает и отправляет почту с вашего компьютера? Если код действительно идентичен, настройки действительно идентичны, машина идентична, но подключение к сокету невозможно, тогда это похоже на проблему среды, возможно, внешнюю по отношению к вашей машине (например, временный сбой или что-нибудь). Единственная другая локальная проблема, о которой я мог бы подумать, может быть брандмауэром Windows на машине - возможно, у него есть правила о том, какие конкретные приложения могут устанавливать исходящие соединения?   -  person F34R    schedule 02.08.2019
comment
@phuzi Спасибо за предложение. Я на самом деле закатил глаза, когда увидел это, но сделал это из-за разочарования, и это сработало. Я полагаю, что это решение, но я хочу SSL. Может быть, кто-то поможет разобраться в этом? Дальше будет больше, просто дайте мне секунду, пока я расследую.   -  person ADyson    schedule 02.08.2019
comment
Хм, вы используете SSL в версии WinForms? Очевидно, что почтовый сервер должен поддерживать соединения SSL.   -  person F34R    schedule 02.08.2019
comment
Не могли бы вы подтвердить, какую версию .Net/ASP.Net вы используете (Core/Framework с номером версии). Есть некоторые отличия в стандартной поддержке версий SSL/TLS.   -  person ADyson    schedule 02.08.2019
comment
System.Net.Mail.SmtpException: Ошибка отправки почты. ---> System.IO.IOException: невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом. ---> System.Net.Sockets.SocketException: существующее соединение было принудительно закрыто удаленным узлом в System.Net.Sockets.Socket.Receive(Byte[] буфер, смещение Int32, размер Int32, SocketFlags socketFlags) в System. Net.Sockets.NetworkStream.Read(Byte[] буфер, смещение Int32, размер Int32) --- Конец внутренней трассировки стека исключений --- в System.Net.Sockets.NetworkStream.Read(Byte[] буфер, смещение Int32, Размер Int32) в System.Net.FixedSizeReader.ReadPacket(Byte[] буфер, смещение Int32, счетчик Int32) в System.Net.Security.SslState.StartReceiveBlob(Byte[] буфер, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState .CheckCompletionBeforeNextReceive (сообщение ProtocolToken, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.StartSendBlob (Byte [] входящий, Int32 count, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.ForceAuthentication (логический ReceiveFirst, Byte [] буфер, AsyncProtocolRequest asyncRequest) в System.Net .Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) в System.Net.TlsStream.CallProcessAuthentication(состояние объекта) в System.Threading.ExecutionContext.RunInternal(ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, логическое значение saveSyncCtx) в System.Threading.ExecutionContext. Run(ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта, логическое значение saveSyncCtx) в System.Threading.ExecutionContext.Run(ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Net.TlsStream.ProcessAuthentication(результат LazyAsyncResult) в System.Net.TlsStream .Write(Byte[] буфер, смещение Int32, размер Int32) в System.Net.PooledStream.Write(Byte[] буфер, смещение Int32, размер Int32) в System.Net.Mail.SmtpConnection.Flush() в System.Net .Mail.ReadLinesCommand.Send(SmtpConnection conn) в System.Net.Mail.EHelloCommand.Send(SmtpConnection conn, String domain) в System.Net.Mail.SmtpConnection. GetConnection(ServicePoint servicePoint) в System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) в System.Net.Mail.SmtpClient.GetConnection() в System.Net.Mail.SmtpClient.Send(сообщение MailMessage) --- Конец внутренняя трассировка стека исключений --- в System. Net.Mail.SmtpClient.Send (сообщение MailMessage)   -  person phuzi    schedule 02.08.2019