/// <summary> /// Составление и отправка Email. /// Что нужно подготовить: /// 0. Настройка для отправки письма: /// - параметры почтового сервера (host, port, ssl) /// - данные отправителя (username, password) /// - email отправителя (может быть равен username по умолчанию) /// 1. Имена файлов для вложения в письмо /// 2. Адрес получателя /// 3. Тема письма /// 4. Данные для тела письма (Номер документа, дата дела...) /// </summary> static void sendEmailByNewInterface(EmailSenderConfig senderConfig, string attachFileName, string AddressTo, string DocNumber, DateTime RequestDate, WebParserResult parserResult) { // Тема письма string mailSubject = $"--==Документ {DocNumber} от {RequestDate} ==--"; // Тело письма string mailBodyText = ComposeMailTextBody(DocNumber, parserResult); string mailBodyHtml = ComposeMailHtmlBody(DocNumber, parserResult); EmailParameters emailParameters = new EmailParameters() { message = new EmailMessageParameters() { AddressFrom = senderConfig.username, AddressFromAlias = senderConfig.usernameAlias, AddressTo = AddressTo, Subject = mailSubject, BodyText = mailBodyText, BodyHtml = mailBodyHtml } }; if (!string.IsNullOrEmpty(attachFileName)) { emailParameters.attachments = new List <EmailAttachmentParameters>() { new EmailAttachmentParameters() { FilePath = attachFileName, FileName = Path.GetFileName(attachFileName), MediaType = MediaTypeNames.Application.Pdf } }; } IEmailSender emailSender = new OnlineEmailSender(senderConfig); IEmailComposer emailComposer = new OnlineEmailComposer(emailParameters, emailSender); emailComposer.ComposeAndSendEmail(); }
public static int Main(string[] args) { if (AppDomain.CurrentDomain.IsDefaultAppDomain()) { // RazorEngine cannot clean up from the default appdomain... Console.WriteLine("Switching to second AppDomain, for RazorEngine..."); AppDomainSetup adSetup = new AppDomainSetup(); adSetup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; var current = AppDomain.CurrentDomain; // You only need to add strongnames when your appdomain is not a full trust environment. var strongNames = new StrongName[0]; var domain = AppDomain.CreateDomain( "MyMainDomain", null, current.SetupInformation, new PermissionSet(PermissionState.Unrestricted), strongNames); var exitCode = domain.ExecuteAssembly(Assembly.GetExecutingAssembly().Location); // RazorEngine will cleanup. AppDomain.Unload(domain); return(exitCode); } Console.WriteLine("-- ParserQueueRunner, ver 0.2 --"); Console.WriteLine("Starting work."); // Проверка работы Excel Addin "Parser" //string res = CheckExcelAddin(); string EXE = Assembly.GetExecutingAssembly().GetName().Name; string startupPath = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); string iniFullPath = Path.Combine(startupPath, EXE + ".ini"); ParserWebQueueParameters parserWebQueueParameters = new ParserWebQueueParameters(); EmailSenderConfig senderConfig = new EmailSenderConfig(); WebParserConfig parserConfig = new WebParserConfig(); int nElementsToProcess = 0; try { // Считывание настроек программы IniReader iniReader = new IniReader(iniFullPath); string testValue = iniReader.GetValue("test", "section", "10"); Console.WriteLine($"Read config file: {iniFullPath}"); // Program params nElementsToProcess = iniReader.GetIntValue("NumberElementsForProcessing", "Program", 0); // WebService parameters parserWebQueueParameters.WebServiceUrl = iniReader.GetValue("WebServiceUrl", "QueueWebService"); parserWebQueueParameters.Method = "Get"; parserWebQueueParameters.Timeout = iniReader.GetIntValue("Timeout", "QueueWebService", 20000); parserWebQueueParameters.ContentType = "application/json"; // Email parameters senderConfig.host = iniReader.GetValue("Host", "EmailSender"); senderConfig.port = iniReader.GetIntValue("Port", "EmailSender"); senderConfig.enableSsl = iniReader.GetBoolValue("EnableSsl", "EmailSender"); senderConfig.username = iniReader.GetValue("UserName", "EmailSender"); senderConfig.password = iniReader.GetValue("Password", "EmailSender"); senderConfig.usernameAlias = iniReader.GetValue("UserNameAlias", "EmailSender"); // Excel Addin Parser parserConfig.AddinConfigName = iniReader.GetValue("ParserConfigName", "ExcelAddinParser"); parserConfig.DealNumberColumn = iniReader.GetValue("DealNumberColumn", "ExcelAddinParser"); parserConfig.IsTrackColumn = iniReader.GetValue("IsTrackColumn", "ExcelAddinParser"); parserConfig.StartRowNumber = iniReader.GetIntValue("StartRowNumber", "ExcelAddinParser", 2); parserConfig.ResultNumberColumn = iniReader.GetValue("ResultNumberColumn", "ExcelAddinParser"); parserConfig.DealNumberHyperlinkColumn = iniReader.GetValue("DealNumberHyperlinkColumn", "ExcelAddinParser"); parserConfig.DocumentPdfFolderNameColumn = iniReader.GetValue("DocumentPdfFolderNameColumn", "ExcelAddinParser"); parserConfig.DocumentPdfUrlColumn = iniReader.GetValue("DocumentPdfUrlColumn", "ExcelAddinParser"); parserConfig.LastDealDateColumn = iniReader.GetValue("LastDealDateColumn", "ExcelAddinParser"); } catch (FileNotFoundException) { Console.WriteLine($"Can't find ini file at {iniFullPath}."); return(0); } catch (Exception ex) { Console.WriteLine($"Error readind ini file: {ex.GetType()}"); return(0); } while (nElementsToProcess-- > 0) { int cnt = processQueue(parserWebQueueParameters, senderConfig, parserConfig); if (cnt == 0) { break; } } Console.WriteLine("Work finished. Press any key."); //Console.ReadKey(); return(0); }
/// <summary> /// Обработка элемента очереди ParserQueue /// </summary> /// <returns>Кол-во обработанных элементов очереди</returns> public static int processQueue(ParserWebQueueParameters parserWebQueueParameters, EmailSenderConfig emailSenderConfig, WebParserConfig webParserConfig) { // Создание обработчика очереди IParserWebQueue parserWebQueue = new OnlineParserWebQueue(parserWebQueueParameters); ParserQueueElement elt = null; try { // Получение элемента очереди elt = parserWebQueue.GetNewElement(); if (elt == null) { Console.WriteLine("No new elements to process."); return(0); } // Пометка статусом "Взят в обработку" parserWebQueue.SetQueueElementStatus(elt.ParserQueueId, 2); // Запустить web-parser Console.WriteLine("Start parsing website for Document Number: {0}", elt.ClientDocNum); WebParserResult parserResult = ParseDocument(webParserConfig, elt.ClientDocNum); Console.WriteLine("parser result: {0}. Last date: {1}, pdf link: {2}", parserResult.ParserStatus, parserResult.LastDealDate, parserResult.CardUrl); if (parserResult.ParserStatus != "Ok") { Console.WriteLine("Error: {0}", parserResult.ParserError); } // Отправка Email string fileName = parserResult.DocumentPfdPath; string emailTo = elt.ClientEmail; string docNumber = elt.ClientDocNum; DateTime requestDate = elt.CreatedTimeUtc; sendEmailByNewInterface(emailSenderConfig, fileName, emailTo, docNumber, requestDate, parserResult); printParserQueueElement(elt); // Пометка элемента очереди как успешно обработанный parserWebQueue.SetQueueElementStatus(elt.ParserQueueId, 3); return(1); } catch (Exception exc) { Console.WriteLine("Error: {0}", exc.Message); // Установить статус "Ошибка обработки" if (elt != null) { parserWebQueue.SetQueueElementStatus(elt.ParserQueueId, 4, exc.Message); } } return(0); }
public EmailSender(EmailSenderConfig config) { this.config = config; }
public EmailService(EmailSenderConfig emailSenderConfig) { _emailSenderConfig = emailSenderConfig; }
public OnlineEmailSender(EmailSenderConfig emailSenderConfig) { _emailSenderConfig = emailSenderConfig; }
public ConsultationController(EmailSenderConfig emailSenderConfig) { _emailSenderConfig = emailSenderConfig; }