Hobby Chef

BUG: ASP.net 2.0 PasswordRecovery Web Control cannot send emails to SSL enabled SMTP Servers - Jive into Messaging world - Site Home - MSDN Blogs

BUG: ASP.net 2.0 PasswordRecovery Web Control cannot send emails to SSL enabled SMTP Servers

BUG: ASP.net 2.0 PasswordRecovery Web Control cannot send emails to SSL enabled SMTP Servers

  • Comments 11

This is a known issue or you can also call it as product limitation. PasswordRecovery control read most of the settings from web.config file. Internally it uses System.Net.Mail to send out email, which does not support reading EnableSSL setting from web.config. This bring us into a situation where PasswordRecovery control cannot send emails to SSL enabled smtp servers.

So when a user tries to send a email to SSL enable server using PasswordRecovery control, he get the following error.

Error: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first. 32sm15616652wfa.13

Cause
=============================
There is no setting in Web.Config for System.Net.Mail (.net 2.0) that maps to EnableSSL property of System.Net.Mail.SmtpClient.

Resolution
=============================
1) In the code behind, We need to consume PasswordRecovery1_SendingMail event of the web control
2) This event provide us access to Email Message being sent and also give us option to cancel the send operation
3) We will make a copy of this email message, and create a new instance of System.Net.Mail.SmtpClient
4) This time we have complete access to its properties and we can turn On/Off the EnableSSL setting
5) Lets set EnableSSL to true and send the email message to desired SMTP server

The below code snippet can do the job..

protected void PasswordRecovery1_SendingMail(object sender, MailMessageEventArgs e)
{
System.Net.Mail.SmtpClient smtpSender = new System.Net.Mail.SmtpClient("mail.google.com", 587);
smtpSender.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtpSender.Credentials = new System.Net.NetworkCredential("username@gmail.com", "password");
smtpSender.EnableSsl = true;

smtpSender.Send(e.Message);
e.Cancel = true;
}


Repro Steps
=============================
1) Configure a PasswordRecovery control
2) Provide all the settings in Web.Config, including username/password, server name, email sender and others
3) Try to send a recovery email when SMTP server requires SSL

More Information
=============================
This problem is related to System.Net.Mail and also documented here...
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=281277

I am working on it and trying to get a fixed for the problem, but as most of the bugs there is no ETA :-)

Leave a Comment
  • Please add 4 and 8 and type the answer here:
  • Post
  • Thanks for the code. But I am getting an operation timed out System.Net.SmtpException. I dont know what is wrong. I have tried after disabling the firewall.but still same error. please help. :(

  • Thank you for working on this.

    It would be so nice to have a EnableSsl attribute for the smtp tag in the web.config.  Surprised it's not already there, I mean, you're going to go ahead and store host, port, username and password, it make perfect sense to have that too.  Anyways, thanks.

  • Thanks!  This was very helpful.  I'm using a Gmail account to send these notifications.  

  • I am also getting timeout error. Actually i am trying it locally. Please let me know if it doesnt work locally.

  • Please ellaborate, how you are using this code ... when you say you are trying it locally what does that means?

  • Since you still got the your smtp stuff in web.config, you only need to add the code below and it

    will work.

    Code:

    protected void PasswordRecovery1_SendingMail(object sender, MailMessageEventArgs e)

    {

    System.Net.Mail.SmtpClient smtpSender = new System.Net.Mail.SmtpClient();

    smtpSender.EnableSsl = true;

    smtpSender.Send(e.Message);

    e.Cancel = true;

    }

  • Thanks for this great idea!!! For me, the actual code didn't work, but replacing it by the code from http://www.aspcode.net/Send-mail-from-ASPNET-using-your-gmail-account.aspx works perfectly!!!

  • The code can use successfully, but when i received the mail after click passwordrecovery button. The password return to me is totally different from mine.

    Mine is 12345, but i get Password: iVa6AzL{xkX#g^

  • so nice, that,s a good solution, thank you.

  • Your code is helpful. Thanks!

    @rodney: In web.config, you should config the MembershipProvider by setting enablePasswordRetrieval="true" enablePasswordReset="False" and passwordFormat="Clear" .

  • I used your solution to send mail via Exchange Online, which requires SSL.  All that was necessary besides the web.config mailSettings was:

               SmtpClient smtpClient = GetSmtpClient();

               if (smtpClient.Port == 587)

               {

                   smtpClient.EnableSsl = true;

               }

               smtpClient.Send(message);

    Thank you sincerely, Vikas.

Page 1 of 1 (11 items)