views:

1514

answers:

3

Given the following section in Web.Config:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="Network" from="SomeWebsite Admin &lt;[email protected]&gt;">
            <network host="smtp.gmail.com" port="587" defaultCredentials="true" userName="[email protected]" password="somepassword" />
        </smtp>
    </mailSettings>
</system.net>

And the following code snippet:

                smtp   = new SmtpClient();

                smtp.Host = "smtp.gmail.com";
                smtp.Port = 587;
                smtp.EnableSsl = true;
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.UseDefaultCredentials = false;
                smtp.Credentials = new NetworkCredential( "[email protected]", "somepassword" );

                smtp.Send( mailMessage );

The above works fine, however commenting out the programmatic overrides, like this:

                smtp   = new SmtpClient();

                //smtp.Host = "smtp.gmail.com";
                //smtp.Port = 587;
                smtp.EnableSsl = true;
                //smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                //smtp.UseDefaultCredentials = false;
                //smtp.Credentials = new NetworkCredential( "[email protected]", "somepassword" );

                smtp.Send( mailMessage );

fails with:

System.Net.Mail.SmtpException: {"The SMTP server requires a secure connection or the 
client was not authenticated. The server response was: 5.5.1 Authentication Required. 
Learn more at                              "}

Yes, the blank space after the "learn more at" is really there, and it makes things extra fun. Thing is, I can't be hardcoding these values, as they change from development to internal staging to live. So I'm wondering why it appears to fail to work with the Web.Config defaults. I'm figuring I'm missing one critical something-or-other?

* EDIT *

Here's some more information, looking at the values of my smtp object (without programmatic overrides except EnableSSL = true):

Host = smtp.gmail.com (makes sense -- proves I'm actually editing the right Web.Config...
DeliveryMethod = Network
Port = 587
Credentials.UserName = <blank> (Problem???)
Credentials.Password = <blank> (Problem???)
Credentials.Domain = <blank>

* EDIT of the EDIT *

The missing Username and Password values, and the accepted response, below, clued me in to the problem: defaultCredentials in Web.Config must be false.

+4  A: 

I am not familiar with working this way but in the web.config defaultCredentials is true, you set it to false when doing it programatically is that the difference?

Pharabus
Tried uncommenting out UseDefaultCredentials, setting to either true or false has no effect. Remember that in the example above that fails, the line's already commented out.
Bob Kaufman
Your UseDefaultCredentials clue allowed me to identify the problem: defaultCredentials must be false in Web.Config. Thank you!
Bob Kaufman
+1  A: 

There is no way to specify whether a SSL / Secure connection should be used when defining the mail settings in the web config file.

I'm pretty sure that's why you get an error.

One way to solve that is to create your own mail sending wrapper, and then using it in your application, but you probably already got that :)

It gets more complicated when using the .net membership controls, like forgot password, create user etc. A way to solve that, is to override the SendingMail event, and then set the EnableSSL property of the mailclient to true.

I hope i was able to help :)

Moulde
Ahh, i may have misunderstood your problem :) But good you got it working.
Moulde
+1  A: 

I think this part should be <smtp deliveryMethod="Network" from="SomeWebsite Admin <[email protected]>"> Like this <smtp deliveryMethod="Network" from="[email protected]">

Wonde
Nice to hear you got the answer
Wonde
Good observation. I was thinking the irregularity there might have been an issue. I tried it both ways and it worked as predicted. Since I do want the friendly name to appear, I'm staying with the Friendly Name <[email protected]> format.
Bob Kaufman