Ошибка MailKit SmtpClient: операция не разрешена на неподключенных сокетах - PullRequest
0 голосов
/ 12 декабря 2018

У меня проблема с подключением к удаленному провайдеру электронной почты с использованием следующего кода:

MimeMessage message = new MimeMessage();
message.To.Add(new MailboxAddress("recipient@mydomain.com"));
message.From.Add(new MailboxAddress("sender@mydomain.com", "sender@mydomain.com"));
var bodyBuilder = new BodyBuilder();
bodyBuilder.HtmlBody = "htmlbody<br />";
bodyBuilder.TextBody = "textbody";
message.Body = bodyBuilder.ToMessageBody();
message.Subject = "Subject";

using (var client = new SmtpClient())
{
    client.ServerCertificateValidationCallback = (s, c, h, e) => true;
    client.Connect("send.one.com", 587, MailKit.Security.SecureSocketOptions.StartTls);  
    client.Authenticate("sender@mydomain.com", "***");
    client.Send(message);
    client.Disconnect(true);
}

Я подтвердил, что настройки верны, поскольку они работают на моем компьютере разработчика.Я говорил как с провайдером электронной почты, так и с хостинговой службой, которые утверждают, что порты SMTP открыты.SPF-запись MailDNS должна разрешать соединение.Я также пробовал System.Net.Mail SmtpClient до MailKit, с теми же результатами.

У кого-нибудь есть опыт решения этой проблемы?Будем весьма благодарны за советы по настройке этого соединения.

Эта ошибка возникает при запуске кода на развернутом сервере (общий сервер Arvixe IIS).

Server Error in '/' Application.
The operation is not allowed on non-connected sockets.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IO.IOException: The operation is not allowed on non-connected sockets.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 

[IOException: The operation is not allowed on non-connected sockets.]
System.Net.Sockets.NetworkStream.InitNetworkStream(Socket socket, FileAccess Access) +6762851
System.Net.Sockets.NetworkStream..ctor(Socket socket, Boolean ownsSocket) +44
MailKit.Net.Smtp.<ConnectAsync>d__70.MoveNext() +1110
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99

System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
MailKit.Net.Smtp.SmtpClient.Connect(String host, Int32 port, SecureSocketOptions options, CancellationToken cancellationToken) +55
MySolution.Functions.SendMail(MimeMessage message, Setting mail_settings) in C:\Users\Me\Documents\Visual Studio 2015\Projects\MySolution\MySolution\Functions.cs:401
MySolution.Functions.SendInstallationReport(Sale sale) in C:\Users\Me\Documents\Visual Studio 2015\Projects\MySolution\MySolution\Functions.cs:281
MySolution.Controllers.ReportsController.Sales(ViewText model, Sale record) in C:\Users\Me\Documents\Visual Studio 2015\Projects\MySolution\MySolution\Controllers\ReportsController.cs:236 lambda_method(Closure , ControllerBase , Object[] ) +147

System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +157
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22
System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49


System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32

System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +50
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +228
System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49


System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34
System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +26
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49

System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36
System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26

System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28

System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9

System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9873665
System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +48
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +159


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET 
Version:4.7.3163.0
...