Сбой вызова SSPI при отправке электронной почты с помощью amazon ses из приложения Windows

Я использую amazon ses для отправки электронных писем и использую ту же конфигурацию на веб-сайте и в приложении Windows.
Веб-сайт отправляет электронные письма нормально, но приложение Windows выдает мне эту ошибку, а не электронные письма:введите здесь описание изображения

обратите внимание, что когда я меняю конфигурацию smtp в приложении Windows на что-то вроде gmail, все работает нормально, проблема возникает только с amazon ses и начала происходить только сегодня, до этого ses нормально работал в приложении Windows.
Также обратите внимание что и веб-сайт, и приложение Windows теперь работают локально.

Трассировки стека:

   at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
   at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
   at System.Net.TlsStream.CallProcessAuthentication(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
   at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.Mail.SmtpConnection.Flush()
   at System.Net.Mail.ReadLinesCommand.Send(SmtpConnection conn)
   at System.Net.Mail.EHelloCommand.Send(SmtpConnection conn, String domain)
   at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
   at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)
   at System.Net.Mail.SmtpClient.GetConnection()
   at System.Net.Mail.SmtpClient.Send(MailMessage message)
   at Mail.EmailSender.SendMail(MailMessage mail) in e:\Mail\EmailSender.cs:line 175

Внутреннее исключение:

{"The message received was unexpected or badly formatted"}

person Amr Elgarhy    schedule 17.04.2013    source источник
comment
Не могли бы вы опубликовать детали внутреннего исключения и/или полную трассировку стека?   -  person Viccari    schedule 22.04.2013
comment
Есть ли у вас какие-либо правила брандмауэра, блокирующие исходящие соединения на компьютере, где запущено ваше приложение для Windows?   -  person Viccari    schedule 26.04.2013
comment
может быть, но я использую ту же конфигурацию в другом приложении win на той же машине, и все работает нормально.   -  person Amr Elgarhy    schedule 27.04.2013
comment
Извините, если я немного отклоняюсь, но вы пытались запустить это приложение с другого компьютера или из другой сети?   -  person Viccari    schedule 27.04.2013
comment
то же самое приложение сейчас не работает на других машинах, но другие приложения с такой же конфигурацией smtp работают нормально даже на той же машине   -  person Amr Elgarhy    schedule 27.04.2013
comment
Вы решили проблему? Уже несколько дней мы не получаем новостей о статусе вашей проблемы.   -  person FeliceM    schedule 13.05.2013


Ответы (3)


У меня была такая же проблема, которая в итоге сводилась к действующему SecurityProtocol при попытке подключения.

Добавление

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

до того, как client.Send разрешил это для меня (мы меняем его на Ssl3 в другом месте, чтобы общаться с другой службой). Было бы неплохо, если бы это (и ServerCertificateValidationCallback) не было глобальным, если кто-то из команды .Net читает.

Я не знаю, является ли это «особенностью» SES или я просто предполагаю, что магия должна работать, но вы можете увидеть кое-что из истории здесь: https://forums.aws.amazon.com/thread.jspa?messageID=472516

person James Ogden    schedule 25.07.2013

Попробуйте проверить конфигурацию SPN (ServicePrincipalName). Эта проблема звучит так, будто что-то повреждено или изменено где-то в вашей конфигурации. Если учетная запись входа экземпляра службы изменяется, имена участников-служб должны быть перерегистрированы под новой учетной записью.

person FeliceM    schedule 08.05.2013

Взгляните на это сообщение SO, читая в сети, многие люди указывают на то, что проблема связана с сертификатом, и мне интересно, действительно ли используемый вами файл «проверки» неверен; они решили это, заменив "файл .pem на .p12"

Также взгляните на это исправление MS, которое очень похоже на вашу проблему.

Также, как предполагает FeliceM, это может быть проблема с учетной записью: (взято из)

«Aspnet работает под другой учетной записью, поэтому вам нужно использовать инструмент WinHttpCertCfg.exe, чтобы разрешить следующей учетной записи доступ к сертификату, который вы должны установить в личных/доверенных папках локального компьютера.

Пользователи, прошедшие проверку подлинности сетевой службы ASPNET

e.g.

winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "CertificateName" -a "ASPNET"

где имя сертификата — понятное имя вашего сертификата.

Вы можете получить инструмент и информацию по ссылке ниже:

http://msdn.microsoft.com/en-us/library/aa384088%28VS.85%29.aspx#%5Fusing

"

person Paul Zahra    schedule 09.05.2013