Example #1
0
        public Pop3ServiceEngine(Pop3ConnectionSettings settings) : base(new TimeSpan(0, 0, 5))
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }
            _settings = settings;

            // worker...
            _worker = new Pop3Worker();
            _worker.MessageReceived += new MailMessageEventHandler(_worker_MessageReceived);
        }
        private MailBox ProcessMailbox(MailBox mailbox, TasksConfig tasksConfig, CancellationToken cancelToken)
        {
            var taskLogger = LoggerFactory.GetLogger(LoggerFactory.LoggerType.Log4Net, "Task_" + Task.CurrentId);

            taskLogger.Info(
                "ProcessMailbox(Tenant = {0}, MailboxId = {1} Address = '{2}') Is {3}",
                mailbox.TenantId, mailbox.MailBoxId,
                mailbox.EMail, mailbox.Active ? "Active" : "Inactive");

            try
            {
                var manager = new MailBoxManager(taskLogger)
                {
                    AuthErrorWarningTimeout = tasksConfig.AuthErrorWarningTimeout,
                    AuthErrorDisableTimeout = tasksConfig.AuthErrorDisableMailboxTimeout
                };

                if (mailbox.Imap)
                {
                    using (var worker = new Imap4Worker(manager, mailbox, tasksConfig, cancelToken, taskLogger))
                    {
                        worker.Aggregate();
                    }
                }
                else
                {
                    using (var worker = new Pop3Worker(manager, mailbox, tasksConfig, cancelToken, taskLogger))
                    {
                        worker.Aggregate();
                    }
                }

                taskLogger.Info("Mailbox '{0}' has been processed.", mailbox.EMail);
            }
            catch (OperationCanceledException)
            {
                taskLogger.Info("Task canceled.");
                throw;
            }
            catch (Exception ex)
            {
                taskLogger.Error(
                    "ProcessMailbox(Tenant = {0}, MailboxId = {1}, Address = '{2}')\r\nException: {3}\r\n",
                    mailbox.TenantId, mailbox.MailBoxId, mailbox.EMail, ex.ToString());
            }

            return(mailbox);
        }