public static bool SendEmailToPeople(string smtpHost, string userName, string pwd,
            string emailFrom, string emailTo,
            string emailSubject, string emailBody, bool IsBodyHtml,string url)
        {
            bool message = false;
            try
            {
                MailMessage email = new MailMessage(emailFrom, emailTo);                email.IsBodyHtml = IsBodyHtml;                email.Body = emailBody;                email.Subject = emailSubject;                email.Priority = MailPriority.Normal;
                email.SubjectEncoding = Encoding.Default;                email.BodyEncoding = Encoding.Default;                System.Net.Mail.SmtpClient stmp = new SmtpClient(smtpHost);
                //设置是否需要发送是否需要身份验证,如果不需要下面的credentials是不需要的    
                stmp.UseDefaultCredentials = true;
                stmp.Credentials = new System.Net.NetworkCredential(userName, pwd);
                stmp.DeliveryMethod = SmtpDeliveryMethod.Network;
                email.Attachments.Add(new Attachment(url));
                stmp.Send(email);
                message = true;
            }
            catch (Exception ex)
            {
                //throw new Exception("发送email出错\n" + ex.ToString());
            }
            return message;
        }这里写了一个邮箱发送的方法!
这个方法是可以发送邮件的,但是却不能验证邮件发送是否成功!
 用户注册网站填入邮箱,系统邮箱给其发送邮件,但是如果用户邮箱填错,或者其邮箱的服务器给拒绝了,我们的系统邮箱会收到退信的邮件,告知其邮箱不能找到!或者服务器拒绝! 但是,我们如何在程序中捕获这样的异常呢?告知其邮件发送失败呢?
 stmp.Send(email);这样是捕获不了的请问大家有什么其它的方法没?

解决方案 »

  1.   

    没有方法了。除非你写个程序读取你的邮箱地址的收件箱,读取并解析邮件,看不是不退信,但是什么时候收到退信也不是确定的。这篇文章是关于检查邮件地址合法性的,看能不能帮你:
    http://www.cnblogs.com/smileman/archive/2008/01/02/1023121.html
      

  2.   

      //判断是否连通邮件服务商
        public static bool SmtpProviderStatus(string pingaddress)
        {
            Process p = new Process();        p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            string pingrst;
            p.Start();
            p.StandardInput.WriteLine("ping -n 1 " + pingaddress);
            p.StandardInput.WriteLine("exit");
            string strRst = p.StandardOutput.ReadToEnd();
            if (strRst.IndexOf("(0% loss)") != -1)
                pingrst = "连接";        else if (strRst.IndexOf("Destination host unreachable.") != -1)
                pingrst = "无法到达目的主机";        else if (strRst.IndexOf("Request timed out.") != -1)
                pingrst = "超时";        else if (strRst.IndexOf("Unknown host") != -1)
                pingrst = "无法解析主机";        else
                pingrst = strRst;
            if (pingrst != "连接")
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        //判断是否已经开启端口
        public static bool Smtpport(string websiteaddress)
        {
            bool openstatus = false;
            System.Net.IPAddress ip = System.Net.IPAddress.Parse(websiteaddress);
            System.Net.IPEndPoint point = new System.Net.IPEndPoint(ip, 25);
            try
            {
                System.Net.Sockets.TcpClient tc = new System.Net.Sockets.TcpClient();
                tc.Connect(ip, 25);
                openstatus = true;
            }
            catch
            {
                openstatus = false;
            }
            return openstatus;
        }
        //返回电子邮件地址
        public static string[] returnmailaddress(string name)
        {
            SqlParameter[] p ={
                new SqlParameter("name",name)
             };
            DataTable dt = Oacommand.ExecuteTable("P_returnmailaddress", p);
            string[] s = new string[dt.Rows.Count];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                s[i] = dt.Rows[i][0].ToString();
            }
            return s;
        }
        //发送电子邮件
        public static void Sendmail(string ReceiveName, string Topic, string Content)
        {
            if (ConfigurationManager.AppSettings["AllowsendEmail"].ToString() == "yes")
            {
                string smtpaddress = ConfigurationManager.AppSettings["SmtpAddress"].ToString();
                //判断是否连接
                if (SmtpProviderStatus(smtpaddress) == false)
                {
                    System.Web.HttpContext.Current.Response.Write("<script>window.confirm('当前邮件服务存在问题,是否放弃发送继续操作?')</script>");
                }
                else
                {
                    //判断端口是否打开
                    string SmtpProviderAddress = ConfigurationManager.AppSettings["SmtpProviderAddress"].ToString();
                    if (Smtpport(SmtpProviderAddress) == false)
                    {
                        System.Web.HttpContext.Current.Response.Write("<script>window.confirm('当前邮件服务存在问题,是否放弃发送继续操作?')</script>");
                    }
                    else
                    {
                        string[] ReceiverAddress = returnmailaddress(ReceiveName);
                        for (int i = 0; i < ReceiverAddress.Length; i++)
                        {
                            MailMessage message = new MailMessage();
                            message.To.Add(new MailAddress(ReceiverAddress[i])); //收件人邮箱
                            message.Subject = Topic;//邮件主题
                            message.Body = Content;  //邮件正文
                            SmtpClient mailClient = new SmtpClient();
                            mailClient.Send(message);
                        }
                    }
                }
            }
            else
            {
                Oasystem.ShowMessage("当前邮件发送为关闭状态");
            }
        }这个能判断吗?