异常处理 使用 smtp 端口发送邮件时
本文关键字:使用 smtp 异常处理 | 更新日期: 2023-09-27 18:35:35
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());
}
这些代码行能够使用smtp
端口发送mail
,其工作正常。通过其他潜在客户查看,可能会有一些exceptions
,其中可能会输入像abc@gmail.com
这样的Dummy email
,或者可能存在一些server issues
,在该特定时间无法发送邮件,或者可能存在其他一些异常,在这些情况下,异常处理功能必须发挥作用,并且应该显示弹出窗口或无法发送邮件等错误消息, 有什么可能吗?
SMTP 服务器级别问题应使用 SmtpException
来处理。
因此,您可以按如下方式修改捕获块
catch (SmtpException ex)
{
Response.Write(ex.ToString());
}
但是,邮箱问题有时不能由 SmtpException 处理。
为此,您可以使用SmtpFailedRecipientException
它来包装从单个邮箱报告的错误。此异常包含 enum 类型的 StatusCode
属性,它将告诉我们错误的确切原因。
请参考以下捕获块
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;
}
}
您可以使用此选项处理单个错误
您可以简单地添加一个<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
}
}