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