2
protected void Button2_Click(object sender, EventArgs e) {        
    //string vv;
    //vv = (string)Session["FID"];
    DateTime sdt = DateTime.Today;
    SqlConnection cn1 = new SqlConnection();
    SqlCommand cmd4 = new SqlCommand();

    cn1.ConnectionString = @"Data Source=BOPSERVER;Initial Catalog=Project;Integrated Security=True";

    String test = DateTime.Now.ToString("dd.MM.yyy");

    for (int i = 0; i <= GridView1.Rows.Count - 1; i++) {

       string toemail = GridView1.Rows[i].Cells[2].Text;
       string FID1 = GridView1.Rows[i].Cells[0].Text;
       GridViewRow row = GridView1.Rows[i];
       CheckBox Ckbox = (CheckBox)row.FindControl("CheckBoxMark1");
       if (Ckbox.Checked == true) {
           sendMail(toemail);

           //ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Email send Succesfully')</script>");
           ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Email sent  on " + test + "')</script>");

           cn1.Open();
           //cmd4.CommandText = "Insert into TrackingFaculty_det  (EmailsentDate)  values (@EmailsentDate) WHERE FID=@FID";
           cmd4.CommandText = "update TrackingFaculty_det SET EmailsentDate=@Email WHERE FID=@FID  ";
           cmd4.CommandType = CommandType.Text;
           cmd4.Connection = cn1;

           cmd4.Parameters.Clear();

           cmd4.Parameters.Add("@Email", SqlDbType.DateTime, 8);
           cmd4.Parameters["@Email"].Value = sdt;
           cmd4.Parameters.Add("@FID", SqlDbType.VarChar, 10);
           cmd4.Parameters["@FID"].Value = FID1;
           cmd4.ExecuteNonQuery();
           cn1.Close();
       }                      
   }
}

public void sendMail(String toemail) {
    try {
        MailMessage mail = new MailMessage();
        mail.To.Add(toemail);
        mail.From = new MailAddress("manipal.mcis1@gmail.com");
        mail.Subject = "Remember Mail";
        // string Body = "Please update profile";
        //mail.Body = Body;
        mail.Body = "  Dear Sir/Madam \n\n\n Please update your profile. . \n\n\n Thanks & Regards \n\n\n MCIS,Manipal.";
        //mail.Body = "<html><body> <h2" + "align=center>Dear Sir/Madam" + "</h2> Please update ur profile</body></html>";
        SmtpClient smtp = new SmtpClient();
        smtp.Host = "smtp.gmail.com";
        smtp.Port = 587;
        smtp.UseDefaultCredentials = false;
        smtp.Credentials = new System.Net.NetworkCredential("manipal.mcis1@gmail.com", "manipal15");
        smtp.EnableSsl = true;
        smtp.Send(mail);
    } catch (Exception ex) {            
        //System.ArgumentException argx = new System.ArgumentException("There is some problem in sending mail please try again later");
        //throw argx;
        //Console.WriteLine("There is some problem in sending mail please try again later", ex.Message);
        Response.Write(ex.ToString());
    }

这些代码行可以发送一个mail使用smtp端口,它工作正常。从另一个角度看,可能有一些exceptions地方可能会输入Dummy email类似的东西abc@gmail.com,或者可能有一些server issues地方在那个特定时间无法发送邮件,或者可能有其他一些异常,在这些情况下,必须使用异常处理功能开始行动,应该显示一个弹出窗口或一些错误消息,例如无法发送邮件,有什么可能吗?

4

2 回答 2

6

SMTP 服务器级别的问题应该使用SmtpException.
所以你可以修改你的catch块如下

 catch (SmtpException ex)
 {    
     Response.Write(ex.ToString());
 }

但是,邮箱问题有时不会由 SmtpException 处理。
为此,您可以使用SmtpFailedRecipientExceptionwhich 用于包装从单个邮箱报告的错误。这个异常包含一个StatusCode枚举类型的属性,它将告诉我们错误的确切原因。

请参考以下 catch 块

catch (SmtpFailedRecipientException ex)        
{
      SmtpStatusCode statusCode = ex.StatusCode;    

      if (statusCode == SmtpStatusCode.MailboxBusy ||
          statusCode == SmtpStatusCode.MailboxUnavailable ||
          statusCode == SmtpStatusCode.TransactionFailed)
      {                   
           // Display message like 'Mail box is busy', 'Mailbox is unavailable' or 'Transaction is failed'
      }
      else
      {  
           throw;
      }
 }

您可以使用此处理个别错误

于 2013-10-15T07:05:49.227 回答
0

您可以简单地添加<asp:Label>上/下GridView,如果出现异常,请将其设置Text为错误消息:

<asp:Label ID="lblMsg" runat="server"></asp:Label>

..

try{
    sendMail(toemail);
}
catch(Exception ex){
    lblMsg.Text = ex.Message; // or whatever message you want to show
    lblMsg.ForeColor = Color.Red // Red shows error
}

...

public void sendMail(String toemail){

    try{
        ...
    }
    catch(Exception ex){
        throw ex; // Don't use Response.Write
    }
}
于 2013-10-15T06:55:33.613 回答