public HttpResponseMessage Detail(string id) { var file = MailPickupFolderWatcher.Path + Path.DirectorySeparatorChar + id + ".eml"; var message = EmlFileParser.ParseEmlFile(file); return(message == null? Request.CreateResponse(HttpStatusCode.NotFound) : Request.CreateResponse(HttpStatusCode.OK, new MailDetail(id, message))); }
private void OnCreated(object source, FileSystemEventArgs e) { // Do nothing if module has been uninstalled if (!ModuleUtil.IsInstalled()) { return; } // Do nothing, if DNN Dev Tools or mail catch is not enabled if (!ServiceLocator.ConfigService.GetEnable() || !ServiceLocator.ConfigService.GetEnableMailCatch()) { return; } Logger.DebugFormat("New mail in pickup folder detected (File: {0})", e.FullPath); // Start new background thread and wait until file is completely written and no longer locked new Thread(() => { var start = DateTime.Now; var file = new FileInfo(e.FullPath); while (true) { Thread.Sleep(100); // Break if file is not released after max timeout if (start - DateTime.Now > new TimeSpan(0, 0, 1)) { break; } // Test if file is still locked if (FileUtil.IsFileLocked(file)) { continue; } // Try to parse mail var message = EmlFileParser.ParseEmlFile(e.FullPath); if (message == null) { return; } // Send mail notification to clients var mail = new Mail(System.IO.Path.GetFileNameWithoutExtension(e.Name), message); GlobalHost.ConnectionManager.GetHubContext <DnnDevToolsNotificationHub>().Clients.All.OnEvent(mail); break; } }).Start(); }
public List <Dto.Mail> GetList(string start, int?skip, int?take, string search) { if (!ServiceLocator.ConfigService.GetEnableMailCatch()) { return(Enumerable.Empty <Dto.Mail>().ToList()); } var mails = new List <Dto.Mail>(); var files = Directory.EnumerateFiles(MailPickupFolderWatcher.Path, "*.eml", SearchOption.TopDirectoryOnly); foreach (var file in files) { var message = EmlFileParser.ParseEmlFile(file); if (message == null) { continue; } mails.Add(new Dto.Mail(Path.GetFileNameWithoutExtension(file), message)); } IEnumerable <Dto.Mail> result = mails.OrderByDescending(e => e.TimeStamp); if (!string.IsNullOrWhiteSpace(search)) { result = result.Where(e => e.Sender.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0 || e.To.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0 || e.Subject.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0 ); } if (!string.IsNullOrWhiteSpace(start)) { result = result.SkipWhile(e => e.Id != start); } if (skip != null) { result = result.Skip(skip.Value); } if (take != null) { result = result.Take(take.Value); } return(result.ToList()); }