0

I'm having an issue connecting to a remote email provider using the following code:

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);
}

I have confirmed that the settings are correct as they work on my dev machine. I have spoken to both the email provider and the hosting service, both of whom state that SMTP ports are open. The MailDNS SPF record should allow the connection. I also tried System.Net.Mail SmtpClient prior to MailKit, with the same results.

Does anyone have any experience of this issue? Advice on how to get this connection working would be greatly appreciated.

This is the error presented when the code is run on the deployed server (shared Arvixe IIS server).

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
  • Seems to be a duplicate of https://stackoverflow.com/questions/53728855/asp-net-mvc-web-application-unable-to-send-email-via-smtp-on-iis-server-hosted-b – jstedfast Dec 11 '18 at 21:52
  • Thanks @jstedfast, unfortunatley that post doesn't have an answer. – Jimmy Brick Dec 11 '18 at 22:01
  • You only asked the other question 3 hours ago. You gotta have patience. No one has answered because no one has an answer for you based on the information you've provided. Most likely the problem is that your web host has a firewall setup or something. That's not a C# or .NET question, that's a sys-admin question. – jstedfast Dec 11 '18 at 22:04
  • I suppose I could have updated the previous post, however it was already quite lengthy so I opted for a new one. Anyway the new information is the error info. I thought that would be worth including. I agreed with you that it absolutely looks like something on the host side or the email provider side is blocking, but both the hosting provider and email provider have 'helped' me with this issue in terms of DNS setup, firewall setup, and even sample code, without a resolution. – Jimmy Brick Dec 11 '18 at 22:09
  • What version of MailKit are you using? Did you try 2.0.7? How about 2.1.0.3? – jstedfast Dec 11 '18 at 22:16
  • v. 2.1.0.0. I installed it from NuGet this afternoon, so it should be the most recent one. – Jimmy Brick Dec 11 '18 at 22:20
  • 2.1.0.3 was released several days ago and fixes some Connect() issues. – jstedfast Dec 11 '18 at 22:20
  • Sorry, NuGet tells me I already have 2.1.0.3: Package 'MailKit.2.1.0.3' already exists in project 'MySolution'. – Jimmy Brick Dec 11 '18 at 22:28
  • Maybe 2.0.7 will provide a more useful error message. – jstedfast Dec 11 '18 at 22:43
  • Have you tested to see what happens with 2.0.7 yet? What was the error? – jstedfast Dec 13 '18 at 14:21
  • I did not. After two weeks and three tickets, Arvixe have agreed to investigate the error. I'm going to wait to see if they find the problem. I think it is something to do with how they manage email traffic. – Jimmy Brick Dec 13 '18 at 17:56
  • @JimmyBrick, Did you come to a resolution for this with your host provider? – cChacon Dec 20 '18 at 18:18
  • Not yet. I requested a progress report yesterday, but haven't heard anything. – Jimmy Brick Dec 20 '18 at 18:47
  • In short, the answer is to not use Arvixe if you want to send via SMTP from an externally hosted email. They do not support it. Below is the answer from their support. – Jimmy Brick Dec 25 '18 at 11:32
  • For the security of all our customers, the requirements for sending email from our shared server environment are as follows. 1. SMTP Authentication must be used. 2. The local mail server, or localhost must be used to send email via web script. (try ws7.win.arvixe.com, localhost, or 127.0.0.1 - port 25 or 26, or ws7securemail.win.arvixe.com - port 465 for secure mail) – Jimmy Brick Dec 25 '18 at 11:33
  • 3. The FROM email address, and SMTP Authentication email address, must be a local user on the local server. If you have your own remote email server and intend to send emails via web script to email addresses that are local to your domain, then that mail domain needs to be removed from the local server (we have to do this) and you will have to use an account from another domain local to the server to send mail from. Otherwise any email going to the local domain will be delivered locally and not to your remote server. – Jimmy Brick Dec 25 '18 at 11:33

0 Answers0