2014-03-13 131 views
0

错误:在System.dll中发生类型'System.Format异常'的异常,但未在用户代码中处理。附加信息:指定的字符串不在所需的表单中为一个电子邮件地址。System.FormatException发送电子邮件时出错

我想发送一个邮件,但代码给出了一个异常System.Format Exception.I试图发送一段时间后的邮件。这里是代码

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Data.SqlClient; 
using System.Net.Mail; 
using System.Net; 

namespace esaote 
{ 
    public partial class user : System.Web.UI.Page 
    { 
     SqlConnection con; 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      con = new SqlConnection("Data Source=ASHISH;Initial Catalog=esaote;Integrated Security=True"); 

      TextBox6.Text = DateTime.Now.ToShortDateString(); 
      TextBox7.Text = DateTime.Now.AddHours(1.00).ToShortDateString(); 
      maildate(); 
     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 

      string q = "insert into info(c_name,c_address, machine, s_version, email,i_date,due_date) values(@c_name, @c_address, @machine, @s_version, @email, @i_date,@due_date)"; 
      SqlCommand cmd = new SqlCommand(q, con); 

      cmd.Parameters.AddWithValue("@c_name", TextBox1.Text); 
      cmd.Parameters.AddWithValue("@c_address", TextBox2.Text); 
      cmd.Parameters.AddWithValue("@machine", TextBox3.Text); 
      cmd.Parameters.AddWithValue("@s_version", TextBox4.Text); 
      cmd.Parameters.AddWithValue("@email", TextBox5.Text); 
      cmd.Parameters.AddWithValue("@i_date",Convert.ToDateTime(TextBox6.Text)); 
      cmd.Parameters.AddWithValue("@due_date",Convert.ToDateTime(TextBox7.Text)); 
      //string due_date = DateTime.Now.ToShortDateString() + DateTime.Now.AddMonths(6).ToShortDateString(); 
      try 
      { 
       con.Open(); 
       if (cmd.ExecuteNonQuery() > 0) 
       { 
        Response.Write("<script languge='javascript'>alert('data inserted');</script>"); 
       } 

      } 
      catch (Exception exp) 
      { 
       Console.Write(exp.Message); 
      } 
      finally 
      { 
       con.Close(); 
      } 


     } 

     public void maildate() 
     { 
      SqlConnection con =new SqlConnection("Data Source=ASHISH;Initial Catalog=esaote;Integrated Security=True"); 
      string s = "select * from info"; 
      SqlCommand cmd = new SqlCommand(s,con); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 

      DataSet ds = new DataSet(); 
      da.Fill(ds); 

      for (int i = 0; i < ds.Tables[0].Rows.Count;i++) 
      { 
       DateTime id = Convert.ToDateTime(ds.Tables[0].Rows[i]["i_date"]); 
       DateTime pd = Convert.ToDateTime(ds.Tables[0].Rows[i]["due_date"]); 

       double diff = (pd - id).TotalDays; 
       if(diff>=1) 
       { 
        string email = Convert.ToString(ds.Tables[0].Rows[i]["email"]); 
        string customer = Convert.ToString(ds.Tables[0].Rows[i]["c_name"]); 
        using (MailMessage mm = new MailMessage(" Service Call","[email protected]")) 
        { 
         // mm.Body = "your sevice for '" + customer + "' are due."; 

         mm.IsBodyHtml = false; 
         SmtpClient smtp = new SmtpClient(); 
         smtp.Host = "smtp.gmail.com"; 
         smtp.EnableSsl = true; 
         NetworkCredential NetworkCred = new NetworkCredential("[email protected]", "062621562a"); 
         smtp.UseDefaultCredentials = true; 
         smtp.Credentials = NetworkCred; 
         smtp.Port = 587; 
         try 
          { 
          smtp.Send(mm); 
          ClientScript.RegisterStartupScript(GetType(), "alert", "alert('Email sent.');", true); 
          } 
          catch (Exception exp) { Console.Write("helllo" + exp); } 
         } 
        } 
       } 
      } 

     } 
     } 

回答

1

MailMessage类中的第一个参数是从地址,但你似乎可以用

MailMessage(" Service Call", 

其更改为从地址要使用。

另外,您在哪里设置To?你可能会更好构建MailMessage,并在Using陈述,这些属性...

using (MailMessage mm = new MailMessage()) 
{ 
    mm.from = "[email protected]"; 
    mm.to = email; //I'm assuming email from your code. 
    mm.subject = "Service Call"; //again, this is just an assumption 
    ... 
} 

侧面说明: 只是想我会提到这一点作为一个侧面说明;一些你在上面需要重构的代码:

  • 的连接字符串可以移入config文件
  • 发送代码的邮件可能被移动到一个新的类,并且暴露出SendMail方法,以帮助减少代码复制
  • 您可以将Insert代码包装到DataHelper类中。

基本上,我说你可以在代码隐藏文件之外移动很多代码。

相关问题