user2381114 user2381114 - 27 days ago 9
C# Question

"The SMTP host was not specified." - but it is specified?

I'm slightly baffled here - I'm receiving the following error:


The SMTP host was not specified.


Even though my code appears to be correct (from what I can see).

I am able to do it manually by including all the details inside of the controller, e.g.

SmtpClient smtpClient = new SmtpClient("smtp.gmail.com");
smtpClient.Port = 587;
... etc


But I shouldn't have to do this, as I want to use the details inside
mailSettings
(Making it re-usable for various different controllers).

mailSettings
in my
Web.Config
file:

<system.net>
<mailSettings>
<smtp from="example@gmail.com" deliveryMethod="Network" >
<network host="smtp.gmail.com" defaultCredentials="true"
port="587" enableSsl="true" userName="example@gmail.com"
password="example"/>
</smtp>
</mailSettings>
</system.net>


My Controller action:

[HttpPost]
public ActionResult SubmitFeature(FormData formData)
{
SmtpClient smtpClient = new SmtpClient();

MailMessage mail = new MailMessage();
mail.To.Add(new MailAddress("example@gmail.com"));
mail.Body = "Test";

smtpClient.Send(mail);

return View("Example");
}


Is there anything I'm missing which may be causing this? I haven't messed around with any other settings in Web.Config, they are as is when setting up a new MVC5 project.

Answer

In a clean MVC project, I am unable to replicate your issue. Following the ScottGu blog post here, I was able to get a gmail sent email without issue (VS 2013, .NET 4.5.1, MVC 5). Note the the <system.net> element is a top level element and not nested inside of AppSettings or <system.web>.

Important

There are a few web.config files in your solution, ensure that the mailSettings is inserted into the root level web.config (and not the one located in the Views folder)

Web.Config

<configuration>
  <system.net>
    <mailSettings>
      <smtp from="myEmail@gmail.com">
        <network host="smtp.gmail.com" 
                 port="587" 
                 enableSsl="true" 
                 userName="myEmail@gmail.com" 
                 password="SuperSecretPwd" 
                 defaultCredentials="false" /> <!--This must be false on Gmail-->
      </smtp>
    </mailSettings>
  </system.net>
</configuration>

Controller

var smtpClient = new SmtpClient();
var msg = new MailMessage();
msg.To.Add("MyOtherAddress@yahoo.com");
msg.Subject = "Test";
msg.Body = "This is just a test email";
smtpClient.Send(msg);

It is unclear if some of the extra attributes you have included are causing issues (thought they shouldn't) such as delivery method. Also, is there a setting for allowing SMTP access or is that just for IMAP/POP delivery?

If you can test and are successful in a clean project, then this would point to either a web.config transformation problem or some other setting(s) in your project overriding the web.config settings that you have in place.

Comments