C#后台程序重启IIS,发邮件通知

应用场景:IIS网站挂掉,系统自动重启IIS,通知相关联系人;

主要代码:

监控类

public class monitoringiis
    {
        EmailSend send = new EmailSend();
        public void MonitoringISSAppPool(object obj)
        {
            string method_Start = "Start";
            string ISSAppPoolName = "";
            string iislist = System.Configuration.ConfigurationManager.AppSettings["iislist"];
            DirectoryEntry appPool = new DirectoryEntry("IIS://LOCALHOST/W3SVC/AppPools");
            while (true)
            {
                try
                {
                    foreach (DirectoryEntry item in appPool.Children)
                    {
                        string AppPoolCommand = item.Properties["ManagedPipelineMode"].Value.ToString();
                        string ManagedRuntimeVersion = item.Properties["ManagedRuntimeVersion"].Value.ToString();//,net版本号                    
                        string AppPoolState = item.Properties["AppPoolState"].Value.ToString();//当前状态                    
                        if (AppPoolState != "2" && iislist.Contains(item.Name.Trim()))
                        {
                            DirectoryEntry findPool = appPool.Children.Find(item.Name, "IIsApplicationPool");
                            findPool.Invoke(method_Start, null);
                            ISSAppPoolName = item.Name;
                            appPool.CommitChanges();
                            appPool.Close();
                            var IIsMsg = string.Format("应用池名称:[{0}],NET版本:{1},标识:{2},当前状态:[{3}],时间:{4}/n", item.Name, ManagedRuntimeVersion,
                                item.SchemaClassName, "已启动", DateTime.Now.ToString());
                            logclass.Info(IIsMsg);
                        }
                    }

                    Thread.Sleep(180000);

                }
                catch (Exception ex)
                {

                    logclass.Error("MonitoringISSAppPool:" + ISSAppPoolName + string.Format("==时间:{0},启动失败", DateTime.Now) + "==" + ex.Source + "==" + ex.InnerException + "==" + ex.TargetSite + "==" + ex.Message);//日志记录错误信息              
                    send.SendMail(string.Format("服务器:" + GetComputerInfo() + "==MonitoringISSAppPool:{0},时间:{1},启动失败", ISSAppPoolName, DateTime.Now) + "==" + ex.Message,
                        ISSAppPoolName + "ISS服务发生问题,请尽快查看原因并解决");//邮件发送错误信息    
                    Thread.Sleep(10000);
                }
            }
        }

        /// <summary>获取当前计算机信息   例如:计算机名:aaa,IP:10.10.10.10</summary>        
        /// <returns></returns>        
        public static string GetComputerInfo()
        {
            var computerNmae = System.Net.Dns.GetHostName();//获取当前计算机名称            
            var computerIp = new System.Net.IPAddress(System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName()).AddressList[0].Address).ToString();
            //获取局域网IP                             
            return string.Format("PC_Name: {0},IP: {1}", computerNmae, computerIp);
        }
    }
View Code

发邮件类:

public class EmailSend
    {
        public void SendMail(string sendmessage,string sendtitle)
        {
            string senduser = System.Configuration.ConfigurationManager.AppSettings["senduser"];
            string sendpwd = System.Configuration.ConfigurationManager.AppSettings["sendpwd"];
            string[] receiveusers = System.Configuration.ConfigurationManager.AppSettings["receiveusers"].Split('|');
            string[] fasong = senduser.Split('@');
            string[] fs = fasong[1].Split('.');

            //发送
            SmtpClient client = new SmtpClient("smtp.163.com");   //设置邮件协议
            client.UseDefaultCredentials = false;//这一句得写前面
            client.DeliveryMethod = SmtpDeliveryMethod.Network; //通过网络发送到Smtp服务器
            client.Credentials = new NetworkCredential(fasong[0].ToString(), sendpwd); //通过用户名和密码 认证
            foreach (string jsuser in receiveusers)
            {
                MailMessage mmsg = new MailMessage(new MailAddress(senduser), new MailAddress(jsuser)); //发件人和收件人的邮箱地址
                mmsg.Subject = sendtitle;      //邮件主题
                mmsg.SubjectEncoding = Encoding.UTF8;   //主题编码
                mmsg.Body = sendmessage;         //邮件正文
                mmsg.BodyEncoding = Encoding.UTF8;      //正文编码
                mmsg.IsBodyHtml = true;    //设置为HTML格式           
                mmsg.Priority = MailPriority.High;   //优先级
                try
                {
                    client.Send(mmsg);
                }
                catch (Exception ex)
                {
                    logclass.Debug("发送邮件失败:" + ex.Message);
                }
            }
        }
    }
View Code

发邮件类(20170331) 使用授权码 

 1         /// <summary>
 2         /// 
 3         /// </summary>
 4         /// <param name="sendmessage"></param>
 5         /// <param name="sendtitle"></param>
 6         /// <param name="emails">多个email地址 以“,”隔开  如 1000@qq.com,kk@163.com</param>
 7         public void SendMail(string sendmessage, string sendtitle, string emails)
 8         {
 9             string senduser = System.Configuration.ConfigurationManager.AppSettings["senduser"];
10             string sendsqm = System.Configuration.ConfigurationManager.AppSettings["sendsqm"];//使用授权码
11             string[] receiveusers = emails.Split(',');
12             string[] fasong = senduser.Split('@');
13             string[] fs = fasong[1].Split('.');
14 
15             //发送
16             SmtpClient client = new SmtpClient("smtp." + fs[0] + ".com");   //设置邮件协议    host: smtp.163.com  smtp.126.com smtp.qq.com
17             //client.UseDefaultCredentials = false;//这一句得写前面
18             client.UseDefaultCredentials = true;//这一句得写前面
19             client.EnableSsl = true;
20             client.DeliveryMethod = SmtpDeliveryMethod.Network; //通过网络发送到Smtp服务器
21             client.Credentials = new NetworkCredential(fasong[0].ToString(), sendsqm); //通过用户名和密码 认证
22             foreach (string jsuser in receiveusers)
23             {
24                 if (string.IsNullOrEmpty(jsuser)) continue;
25                 MailMessage mmsg = new MailMessage(new MailAddress(senduser), new MailAddress(jsuser)); //发件人和收件人的邮箱地址
26                 mmsg.Subject = sendtitle;      //邮件主题
27                 mmsg.SubjectEncoding = Encoding.UTF8;   //主题编码
28                 mmsg.Body = sendmessage;         //邮件正文
29                 mmsg.BodyEncoding = Encoding.UTF8;      //正文编码
30                 mmsg.IsBodyHtml = true;    //设置为HTML格式           
31                 mmsg.Priority = MailPriority.High;   //优先级
32                 try
33                 {
34                     client.Send(mmsg);
35                 }
36                 catch (Exception ex)
37                 {
38                     LogUtils.Error("发送邮件失败:" + ex.Message);
39                 }
40             }
41         }
View Code
原文地址:https://www.cnblogs.com/systemkk/p/4852051.html