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); } }
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(); }
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); }
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); }