Error in Application : The specified string is not in the form required for an e-mail address

asp.netc#-4.0smtp

I am trying to send an email to the user's account when the user clicks send button. But I am getting the above error. Below is my sendClick code.

protected void btnsendCode_Click(object sender, EventArgs e)
{
    try
    {
        if (txtemail.Text != "")
        {
            Random rd = new Random();

            veri = rd.Next(1000, 10000);
            MailMessage mm = new MailMessage();
            mm.To.Add(new MailAddress(txtemail.Text.ToString()));

            mm.From = new MailAddress("xxx@yyy.in", "Verification Mail");
            mm.Body = "Your Verification Code is - " + veri.ToString();
            mm.IsBodyHtml = true;
            mm.Subject = "Verification mail";
            SmtpClient smcl = new SmtpClient();
            smcl.Host = "smtp.gmail.com";
            smcl.Port = 587;
            smcl.Credentials = new NetworkCredential("xxx@yyy.in", "xxx");
            //smcl.EnableSsl = true;
            smcl.Send(mm);
            Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Verification Code sent to your Email ID! Please Check your Email!!');", true);
            txtverify.Enabled = true;
            btnsendCode.Text = "Send Code Again";
            lblmsg.Visible = false;
        }
        else
        {
            lblmsg.Visible = true;
            lblmsg.Text = "Please enter Email ID!!";
            lblmsg.ForeColor = System.Drawing.Color.Yellow;
            lblmsg.BorderColor = System.Drawing.Color.Red;
            lblmsg.BorderStyle = BorderStyle.Ridge;
            lblmsg.BorderWidth = new Unit("2");
            lblmsg.Focus();
        }
    }
    catch (WebException we)
    {
        lblmsg.Visible = true;
        lblmsg.Text = we.Message.ToString();
        lblmsg.ForeColor = System.Drawing.Color.Yellow;
        lblmsg.BorderColor = System.Drawing.Color.Red;
        lblmsg.BorderStyle = BorderStyle.Ridge;
        lblmsg.BorderWidth = new Unit("2");
    }
}

Stack Trace

[FormatException: The specified string is not in the form required for
an e-mail address.]
System.Net.Mail.MailAddressParser.ReadCfwsAndThrowIfIncomplete(String
data, Int32 index) +1475945
System.Net.Mail.MailAddressParser.ParseDomain(String data, Int32&
index) +135 System.Net.Mail.MailAddressParser.ParseAddress(String
data, Boolean expectMultipleAddresses, Int32& index) +99
System.Net.Mail.MailAddressParser.ParseAddress(String data) +23
System.Net.Mail.MailAddress..ctor(String address, String displayName,
Encoding displayNameEncoding) +220
System.Net.Mail.MailMessage..ctor() +130
events.btnsendCode_Click(Object sender, EventArgs e) in
d:\inetpub\vhosts\marpallichande.in\httpdocs\Test\events.aspx.cs:101
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9552874
System.Web.UI.WebControls.Button.RaisePostBackEvent(String
eventArgument) +103
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String
eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
+35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
+1724

Which part I am committing mistake and need to correct it?

Best Answer

The reason it fails is using the empty constructor without the mail settings to match:

MailMessage mm = new MailMessage();

The empty constructor relies on:

<system.net>
  <mailSettings>
    <smtp from="report@company.com" />
  </mailSettings>
</system.net>

in your app or web.config file. So either use the constructor that expects a from and to address, or add that node to your app/web.config file.

I firmly believe this is a bug in the .Net framework, because we were able to create new MailMessage() objects and then assign the "from" later on, but in .Net 4.0 and under certain conditions—which I still don't fully understand—this fails. I welcome being corrected of course, but for now, this seems like an oversight.

So some of our customers never encountered this issue, but to fix it we had to add that dummy setting to the web.config files.

Related Topic