Пример #1
0
        public async Task <IActionResult> SearchCurrentFolder(string searchPhrase)
        {
            searchPhrase = WebUtility.UrlDecode(searchPhrase);

            var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (userId == null)
            {
                throw new ApplicationException($"User ID was not found in user claims!");
            }

            var user = await _dbContext.Users.Include(appUser => appUser.ImapConfigurations).SingleOrDefaultAsync(appUser => appUser.Id == userId);

            var firstImapConf = user.ImapConfigurations.First();

            if (!ImapClientModel.ImapClientModelsDictionary.TryGetValue(firstImapConf.Login + firstImapConf.Password, out var model))
            {
                model = new ImapClientModel(
                    firstImapConf.Login,
                    firstImapConf.Password,
                    firstImapConf.Host,
                    firstImapConf.Port,
                    firstImapConf.UseSsl);
            }

            model.FindPhraseInCurrFolder(searchPhrase);
            return(View("ShowMailsView", model));
        }
Пример #2
0
        public async Task <IActionResult> GetPage(int page)
        {
            var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (userId == null)
            {
                throw new ApplicationException($"User ID was not found in user claims!");
            }

            var user = await _dbContext.Users
                       .Include(appUser => appUser.ImapConfigurations)
                       .SingleOrDefaultAsync(appUser => appUser.Id == userId);

            // for now using only one configuration
            var firstImapConf = user.ImapConfigurations.First();

            if (!ImapClientModel.ImapClientModelsDictionary.TryGetValue(firstImapConf.Login + firstImapConf.Password, out var model))
            {
                model = new ImapClientModel(
                    firstImapConf.Login,
                    firstImapConf.Password,
                    firstImapConf.Host,
                    firstImapConf.Port,
                    firstImapConf.UseSsl);
            }

            model.Page = page;
            model.Refresh();

            return(View("ShowMailsView", model));
        }
Пример #3
0
        public async Task <IActionResult> PeriodicallyRefreshMail()
        {
            var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (userId == null)
            {
                throw new ApplicationException($"User ID was not found in user claims!");
            }

            var user = await _dbContext.Users
                       .Include(appUser => appUser.ImapConfigurations)
                       .SingleOrDefaultAsync(appUser => appUser.Id == userId);

            // for now using only one configuration
            var firstImapConf = user.ImapConfigurations.First();

            if (!ImapClientModel.ImapClientModelsDictionary.TryGetValue(firstImapConf.Login + firstImapConf.Password, out var model))
            {
                model = new ImapClientModel(
                    firstImapConf.Login,
                    firstImapConf.Password,
                    firstImapConf.Host,
                    firstImapConf.Port,
                    firstImapConf.UseSsl);
            }

            // without refresh, new messages should be downloaded

            return(PartialView("HeadersPartialView", model));
        }
Пример #4
0
        // GET: /<controller>/
        public async Task <IActionResult> Index()
        {
            var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (userId == null)
            {
                throw new ApplicationException($"User ID was not found in user claims!");
            }

            var user = await _dbContext.Users
                       .Include(appUser => appUser.ImapConfigurations)
                       .SingleOrDefaultAsync(appUser => appUser.Id == userId);

            if (user == null)
            {
                throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
            }

            if (!user.ImapConfigurations.Any())
            {
                return(RedirectToAction(nameof(ManageController.SelectImapProvider), "Manage"));
            }

            // for now using only one configuration
            var firstImapConf = user.ImapConfigurations.First();

            if (!ImapClientModel.ImapClientModelsDictionary.TryGetValue(firstImapConf.Login + firstImapConf.Password, out var model))
            {
                model = new ImapClientModel(
                    firstImapConf.Login,
                    firstImapConf.Password,
                    firstImapConf.Host,
                    firstImapConf.Port,
                    firstImapConf.UseSsl);
            }

            if (!model.IsConnected)
            {
                model.Connect();
                model.ActiveFolder = "INBOX";
            }

            return(View("ShowMailsView", model));
        }
Пример #5
0
        public async Task <JsonResult> GetMessage(string folderName, int id)
        {
            var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (userId == null)
            {
                throw new ApplicationException($"User ID was not found in user claims!");
            }

            var user = await _dbContext.Users
                       .Include(appUser => appUser.ImapConfigurations)
                       .SingleOrDefaultAsync(appUser => appUser.Id == userId);

            // for now using only one configuration
            var firstImapConf = user.ImapConfigurations.First();

            if (!ImapClientModel.ImapClientModelsDictionary.TryGetValue(firstImapConf.Login + firstImapConf.Password, out var model))
            {
                model = new ImapClientModel(
                    firstImapConf.Login,
                    firstImapConf.Password,
                    firstImapConf.Host,
                    firstImapConf.Port,
                    firstImapConf.UseSsl);
            }

            folderName = WebUtility.UrlDecode(folderName);

            string activeFolder = folderName == null ? "INBOX" : folderName;

            MimeKit.MimeMessage message = model.GetMessage(activeFolder, (uint)id);
            var messageBody             = message.HtmlBody == null ? message.TextBody : message.HtmlBody;

            var data = new
            {
                Subject = message.Subject,
                From    = message.From.ToString(),
                Body    = messageBody
            };

            return(new JsonResult(data));
        }
Пример #6
0
        public async Task <IActionResult> SelectImapProvider(ProviderViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;

            if (userId == null)
            {
                throw new ApplicationException($"User ID was not found in user claims!");
            }

            var user = await _dbContext.Users
                       .Include(appUser => appUser.ImapConfigurations)
                       .Include(appUser => appUser.SmtpConfigurations)
                       .SingleOrDefaultAsync(appUser => appUser.Id == userId);

            var firstSmtpConf     = user.SmtpConfigurations.FirstOrDefault();
            var smtpConfFromModel = new SmtpConfiguration
            {
                Host                = model.smtphost,
                Port                = model.smtpport,
                Username            = model.login,
                Password            = model.password,
                SecureSocketOptions = model.useSsl ? MailKit.Security.SecureSocketOptions.SslOnConnect : MailKit.Security.SecureSocketOptions.Auto
            };

            if (firstSmtpConf == null)
            {
                user.SmtpConfigurations.Add(smtpConfFromModel);
            }
            else
            {
                firstSmtpConf.OverrideWith(smtpConfFromModel);
            }

            var firstImapConf     = user.ImapConfigurations.FirstOrDefault();
            var imapConfFromModel = new ImapConfiguration
            {
                Host     = model.imaphost,
                Port     = model.imapport,
                Login    = model.login,
                Password = model.password,
                UseSsl   = model.useSsl
            };

            if (firstImapConf == null)
            {
                user.ImapConfigurations.Add(imapConfFromModel);
                firstImapConf = imapConfFromModel;
            }
            else
            {
                firstImapConf.OverrideWith(imapConfFromModel);
            }

            await this._dbContext.SaveChangesAsync();

            var newImapModel = new ImapClientModel(
                firstImapConf.Login,
                firstImapConf.Password,
                firstImapConf.Host,
                firstImapConf.Port,
                firstImapConf.UseSsl);

            ImapClientModel.ImapClientModelsDictionary.AddOrUpdate(firstImapConf.Login + firstImapConf.Password, newImapModel,
                                                                   ((key, oldValue) => newImapModel));

            StatusMessage = "Your imap provider has been updated";
            return(RedirectToAction(nameof(Index)));
        }