Exemplo n.º 1
0
 private void btnTestSendMail_Click(object sender, RoutedEventArgs e)
 {
     try
     {
         MailHelper.ExceptionNotify("Test Mail", "This is a test connection mail!", this.StmpServer);
         MessageBox.Show("Send test mail succeed!");
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message + "----" + ex.StackTrace);
     }
 }
Exemplo n.º 2
0
        public void Run(string task)
        {
            ReportItemDictionary <ReportTask> tasks = ReportConfig.ReportTaskManager.ItemCollection;

            ExportEngine engine = new ExportEngine(new QlikViewConnector());

            engine.Logger = this.Logger;

            ReportTask taskItem = tasks.Values.FirstOrDefault(x => x.Name.ToString() == task);

            if (taskItem != null)
            {
                Console.WriteLine("Running task first time: " + taskItem.Name + ".......");
                engine.Logger.Message("Running task first time: " + taskItem.Name + ".......");
                IError error = engine.RunTask(taskItem, ReportConfig.SmtpServerManager.SmtpServer);

                if (error.HasError == false)
                {
                    Console.WriteLine("Running task fisrt time" + taskItem.Name + " complete.......");
                    engine.Logger.Message("Running task fisrt time" + taskItem.Name + " complete.......");
                }
                else
                {
                    Console.WriteLine("Running task fisrt time " + taskItem.Name + " failed.......");
                    engine.Logger.Error("Running task fisrt time " + taskItem.Name + " failed....... \n" + error.ErrorMessage.ToString());
                    //MailHelper.ExceptionNotify("Running task fisrt time " + taskItem.Name + " failed", error.ErrorMessage.ToString(), ReportConfig.Instance.SmtpServer);

                    Console.WriteLine("Running task second time: " + taskItem.Name + ".......");
                    engine.Logger.Message("Running task second time: " + taskItem.Name + ".......");

                    error = engine.RunTask(taskItem, ReportConfig.SmtpServerManager.SmtpServer);

                    if (error.HasError)
                    {
                        MailHelper.ExceptionNotify("Running task second time " + taskItem.Name + " failed", error.ErrorMessage.ToString(), ReportConfig.SmtpServerManager.SmtpServer);
                    }
                }
            }
            else
            {
                engine.Logger.Error(string.Format("There is no task {0}. ", task));
            }

            this.Close();
        }
Exemplo n.º 3
0
        public IError RunTask(ReportTask task, SmtpServer smtpServer)
        {
            IError taskError = new QvError();

            try
            {
                this.Logger.Message("Begin to Run task [" + task.Name + "]------------------------------------------------");

                this.Logger.Message("Preview the connection. ");

                this.ConnectionPreview(task.Reports.Values.First());

                this.Logger.Message(string.Format("Task [{0}] have reports [{1}]", task.Name, string.Join(",", task.Reports.Keys.ToArray())));

                List <ReportContext> reports;
                List <string>        missingExportReports;

                IError error = this.PopulateReportContext(task, smtpServer, out reports, out missingExportReports);

                if (error.HasError)
                {
                    taskError.HasError = true;
                    taskError.ErrorMessage.AppendLine(error.ErrorMessage.ToString());
                }
                else
                {
                    #region Send Mail

                    if (smtpServer.Validate() && reports.Count > 0)
                    {
                        SmtpClientAdaptor smtpClient = new SmtpClientAdaptor(smtpServer);

                        //Get the recipients
                        List <string> recipients = task.Recipients.Values.Select(x => x.Email).ToList();
                        if (task.Group != null)
                        {
                            foreach (var r in task.Group.RecipientList.Values)
                            {
                                if (!recipients.Contains(r.Email))
                                {
                                    recipients.Add(r.Email);
                                }
                            }
                        }

                        if (recipients.Count > 0)
                        {
                            if (task.IsSendMailInSingleMail)
                            {
                                smtpClient.SendEmail(task.MessageDefinition, reports, recipients);
                            }
                            else
                            {
                                foreach (var item in reports)
                                {
                                    List <ReportContext> list = new List <ReportContext>();
                                    list.Add(item);
                                    smtpClient.SendEmail(task.MessageDefinition, list, recipients);
                                }
                            }
                        }
                        else
                        {
                            this.Logger.Error("No recipients set up");
                        }
                    }
                    else
                    {
                        this.Logger.Error("SMTP SERVER Validate failed or there is no report exported, can not send email.");
                        this.Logger.Info("Exported reports count " + reports.Count);
                    }

                    #endregion

                    #region Upload to Ftp Server

                    if (task.FtpServer != null)
                    {
                        string remoteFile = string.Empty;
                        try
                        {
                            FtpClient client = new FtpClient(task.FtpServer.Host, task.FtpServer.Username, task.FtpServer.Password, task.FtpServer.Port);

                            foreach (var item in reports)
                            {
                                if (!string.IsNullOrWhiteSpace(task.FtpServer.Folder))
                                {
                                    remoteFile = task.FtpServer.Folder + (task.FtpServer.Folder.EndsWith("/") ? string.Empty : "/") + item.OutputFullName.Split("\\".ToArray())[item.OutputFullName.Split("\\".ToArray()).Length - 1];
                                }
                                else
                                {
                                    remoteFile = item.OutputFullName.Split("\\".ToArray())[item.OutputFullName.Split("\\".ToArray()).Length - 1];
                                }
                                client.Upload(remoteFile, item.OutputFullName);
                            }
                        }
                        catch (Exception ex)
                        {
                            this.Logger.Error("Ftp upload failed!" + ex.Message + ex.StackTrace);

                            MailHelper.ExceptionNotify("Ftp upload failed", ex.Message + ex.StackTrace + "\n" + "Remote file:" + remoteFile, smtpServer);
                        }
                    }

                    #endregion
                    if (missingExportReports.Count > 0)
                    {
                        string subject = "Some reports can not be exported";
                        string message = string.Join("\n\r", missingExportReports);
                        MailHelper.ExceptionNotify(subject, message, smtpServer);
                        taskError.HasError = true;
                        taskError.ErrorMessage.AppendLine(message);
                    }
                }
            }
            catch (Exception ex)
            {
                this.Logger.Error("Failed to run the task [" + task.Name + "] Error:" + ex.Message + "\n" + ex.StackTrace);

                try
                {
                    if (!string.IsNullOrEmpty(smtpServer.ExceptionTo))
                    {
                        string        subject = "QlikView Report Export&MailSend system Exception";
                        StringBuilder sb      = new StringBuilder();
                        sb.AppendLine("Task name: " + task.Name);
                        sb.AppendLine(string.Empty);
                        sb.AppendLine("Exception message: " + ex.Message);
                        sb.AppendLine("Stack Trace---------------");
                        sb.AppendLine(ex.StackTrace);

                        MailHelper.ExceptionNotify(subject, sb.ToString(), smtpServer);
                        taskError.HasError = true;
                        taskError.ErrorMessage.AppendLine(sb.ToString());
                    }
                }
                catch (Exception ex1)
                {
                    this.Logger.Error("Send exception mail failed. " + ex.Message + "\n" + ex1.StackTrace);
                }
            }

            this.Logger.Message("Complete running the task----------------------------------------------------------");

            return(taskError);
        }
Exemplo n.º 4
0
        private IError PopulateReportContext(ReportTask task, SmtpServer smtpServer, out List <ReportContext> exportedReports, out List <string> missingReports)
        {
            exportedReports = new List <ReportContext>();
            missingReports  = new List <string>();

            List <ReportContext> excelReports = new List <ReportContext>();

            string folder = string.Empty;

            if (task.OutputFolder.EndsWith(@"\"))
            {
                folder = task.OutputFolder.Remove(task.OutputFolder.Length - 1);
            }
            else
            {
                folder = task.OutputFolder;
            }
            IError error = new QvError();

            #region Export report
            foreach (var item in task.Reports.Values)
            {
                this.Logger.Message("Running report [" + item.Name + "]");
                this.Logger.Message("Setting connection [" + item.Connection.Name + "]");

                string fileName;

                error = this.ExportReport(item, folder, out fileName);

                if (error.HasError == false)
                {
                    if (item.ReportType != Common.ReportType.Excel)
                    {
                        exportedReports.Add(new ReportContext()
                        {
                            Name           = item.Name,
                            Description    = item.Description,
                            OutputFullName = fileName,
                            ReportType     = item.ReportType,
                            HtmlFormat     = this.GetHtml(item, fileName)
                        });
                    }
                    else
                    {
                        excelReports.Add(new ReportContext()
                        {
                            Name           = item.Name,
                            Description    = item.Description,
                            OutputFullName = fileName,
                            ReportType     = item.ReportType,
                            HtmlFormat     = this.GetHtml(item, fileName)
                        });
                    }
                    this.Logger.Message("Export report [" + item.Name + "] complete");
                }
                else
                {
                    missingReports.Add(fileName);
                    this.Logger.Error(string.Format("The report [{0}] cannot be exported.", fileName));
                }
            }

            if (task.IsMergeInSingleExcel)
            {
                this.Logger.Message("Begin Merge in single excel");
                ReportContext mergedReport;
                string        mergedFileName = folder + @"\" + task.Name + ".xls";

                error = this.MergeExcelReports(excelReports, mergedFileName, task.Name, out mergedReport);

                if (error.HasError == false)
                {
                    exportedReports.Add(mergedReport);
                    this.Logger.Message("Succed to merge in single excel");
                }
                else
                {
                    this.Logger.Message("Failed to merge, retain multiple files \n" + error.ErrorMessage);
                    MailHelper.ExceptionNotify("Failed to merge files for task " + task.Name, error.ErrorMessage.ToString(), smtpServer);
                }
            }
            else
            {
                exportedReports.AddRange(excelReports);
            }
            #endregion

            return(error);
        }