private void SendEmail(LogfileEntry myLogfileEntry)
        {
            MailMessage myMailMessage = new MailMessage();

            string[] separators = { ";" };
            string[] recipients = vRecipientAddresses.Split(separators, StringSplitOptions.RemoveEmptyEntries);

            foreach (string recipient in recipients)
            {
                myMailMessage.To.Add(new MailAddress(recipient));
            }

            myMailMessage.Priority = MailPriority.High;
            myMailMessage.From     = new MailAddress(vSenderAddress, vSenderDisplayName);
            myMailMessage.Subject  = vEmailSubject;
            myMailMessage.Body     = "The task '" + myLogfileEntry.cTaskName + "' returned with status 'FinishedFail'";
            myMailMessage.Body    += "\r\n\r\nApp Name: " + myLogfileEntry.cAppName;
            myMailMessage.Body    += "\r\nExecution time: " + myLogfileEntry.cStartTime;
            myMailMessage.Body    += "\r\n\r\nPlease visit https://" + myLogfileEntry.cHostname + "/qmc/tasks to see more details";

            SmtpClient mySmtpClient = new SmtpClient(vSmtpServer);

            mySmtpClient.Send(myMailMessage);
        }
        private void ScanTaskExecutionLogfile()
        {
            FileInfo myLogfile;

            try
            {
                myLogfile = new FileInfo(Path.Combine(vLogfilePath, vLogfileName));
                myLogfile.Refresh();
            }
            catch (Exception ex)
            {
                myLogWriter.WriteLine(ex.Message);
                return;
            }

            if (myLogfile.Length == vLastFileSize)
            {
                return;
            }

            myLogWriter.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":\tCurrent file size: " + myLogfile.Length + " bytes\tPreviously checked file size: " + vLastFileSize + " bytes");
            //myLogWriter.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":\tScanning Task Execution Logfiles ...");


            vLastFileSize = myLogfile.Length;

            string[] separators  = { "\r\n" };
            string[] separators2 = { "\t" };

            myLogWriter.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":\tAnalyzing Logfile: " + Path.Combine(vLogfilePath, vLogfileName));

            string inFile = null;

            try
            {
                using (var fileStream = new FileStream(Path.Combine(vLogfilePath, vLogfileName), FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    using (var logfileReader = new StreamReader(fileStream, Encoding.Default))
                    {
                        inFile = logfileReader.ReadToEnd();
                    }
            }
            catch (Exception ex)
            {
                myLogWriter.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":\t" + ex.Message);
                return;
            }


            string[] inLines = inFile.Split(separators, StringSplitOptions.RemoveEmptyEntries);

            for (int i = 1; i < inLines.Count(); i++)
            {
                string[] inCol = inLines[i].Split(separators2, StringSplitOptions.None);

                LogfileEntry myLogfileEntry = new LogfileEntry();

                myLogfileEntry.cSequence        = inCol[0];
                myLogfileEntry.cTimestamp       = inCol[1];
                myLogfileEntry.cLevel           = inCol[2];
                myLogfileEntry.cHostname        = inCol[3];
                myLogfileEntry.cLogger          = inCol[4];
                myLogfileEntry.cThread          = inCol[5];
                myLogfileEntry.cId              = inCol[6];
                myLogfileEntry.cServiceUser     = inCol[7];
                myLogfileEntry.cMessage         = inCol[8];
                myLogfileEntry.cException       = inCol[9];
                myLogfileEntry.cStackTrace      = inCol[10];
                myLogfileEntry.cProxySessionId  = inCol[11];
                myLogfileEntry.cTaskId          = inCol[12];
                myLogfileEntry.cTaskName        = inCol[13];
                myLogfileEntry.cAppId           = inCol[14];
                myLogfileEntry.cAppName         = inCol[15];
                myLogfileEntry.cExecutionId     = inCol[16];
                myLogfileEntry.cExecutingNodeId = inCol[17];
                myLogfileEntry.cStatus          = inCol[18];
                myLogfileEntry.cStartTime       = inCol[19];
                myLogfileEntry.cStopTime        = inCol[20];
                myLogfileEntry.cDuration        = inCol[21];
                myLogfileEntry.cFailureReason   = inCol[22];
                myLogfileEntry.cId2             = inCol[23];

                string taskKey = myLogfileEntry.cSequence + "_" + myLogfileEntry.cTimestamp;

                if (myLogfileEntry.cStatus == "FinishedFail" && !(checkedTasks.Contains(taskKey)))
                {
                    SendEmail(myLogfileEntry);
                    myLogWriter.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":\t\tTASK FAILED:\t" + myLogfileEntry.cTaskName + ", APP: " + myLogfileEntry.cAppName + " ... sending Email to " + vRecipientAddresses);
                    checkedTasks.Add(taskKey);
                }
            }
        }