Beispiel #1
0
        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)));
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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());
        }