Пример #1
0
        private static void FillUserCredentials(MailBoxOptions options)
        {
            System.Console.WriteLine("Введите логин. По завершению нажмите клавишу Enter...");
            var login = System.Console.ReadLine();

            System.Console.WriteLine("Введите пароль. По завершению нажмите клавишу Enter...");
            string password = string.Empty;

            while (true)
            {
                var key = System.Console.ReadKey(true);
                if (key.Key == ConsoleKey.Enter)
                {
                    break;
                }
                if (key.Key == ConsoleKey.Backspace)
                {
                    continue;
                }
                System.Console.Write("*");
                password += key.KeyChar;
            }
            System.Console.WriteLine();
            options.UserName = login;
            options.Password = password;
        }
Пример #2
0
        public static async Task LoadPriceLists()
        {
            ProvidersSection providersSection = (ProvidersSection)ConfigurationManager.GetSection("PricelistProviders");
            MailBoxSection   mailSection      = (MailBoxSection)ConfigurationManager.GetSection("MailConfig");

            var mailBox = mailSection.MailBoxes.Count > 1
                ? throw new ConfigurationErrorsException("Указано более одного почтового ящика")
                : mailSection.MailBoxes[0];


            System.Console.WriteLine("Чтение прайс листов с электронной  почты.");
            System.Console.WriteLine("Сисок постащиков.");
            foreach (ProviderElement provider in providersSection.Providers)
            {
                System.Console.WriteLine(provider.Name);
            }
            System.Console.WriteLine($"Адрес почтового сервера: {mailBox.ServerUrl}");

            var mailBoxOptions = new MailBoxOptions();

            FillUserCredentials(mailBoxOptions);
            mailBoxOptions.Port          = mailBox.Port;
            mailBoxOptions.ImapServerUrl = mailBox.ServerUrl;

            Action <ProgressOptions> progressOptionsFunc = progressOptions => System.Console.WriteLine(progressOptions.Message);

            using (var mailHelper = new MailHelper(mailBoxOptions))
            {
                var i         = 0;
                var connected = false;
                for (; i < 3 && !connected; i++)
                {
                    try
                    {
                        await mailHelper.Connect(new Progress <ProgressOptions>(progressOptionsFunc));

                        connected = true;
                    }
                    catch (MailAuthenticationException e)
                    {
                        System.Console.WriteLine(e.Message);
                        FillUserCredentials(mailHelper.MailOptions);
                    }
                }
                if (!connected)
                {
                    throw new ApplicationException("Превышен лимит попыток подключений");
                }

                var dbh = new DbHelper();

                await dbh.ClearPriceListsTable(new Progress <ProgressOptions>(progressOptionsFunc));

                List <Task <List <PriceItem> > > getMessagesTasks = new List <Task <List <PriceItem> > >();

                foreach (ProviderElement providersSectionProvider in providersSection.Providers)
                {
                    var progress = new Progress <ProgressOptions>(progressOptionsFunc);
                    ;
                    getMessagesTasks.Add(mailHelper.GetMessages(new ProviderOptions
                    {
                        Name = providersSectionProvider.Name,
                        ColumnDefinitions = providersSectionProvider.ToDictionary()
                    }, progress));
                }

                await Task.WhenAll(getMessagesTasks).ContinueWith(_ =>
                {
                    foreach (var messagesTask in getMessagesTasks)
                    {
                        dbh.WritePriceLists(messagesTask.Result, new Progress <ProgressOptions>(progressOptionsFunc));
                    }
                });
            }
        }