コード例 #1
0
        /// <summary>
        /// Sends the messages which have not been sent yet. Static overrides are applied.
        /// </summary>
        /// <returns></returns>
        public IEnumerable<DequeueResultItem> SendQueuedMessages()
        {
            var filters = new DequeueFilterList().And(new SentStatusDequeueFilter(false));
            var overrides = new OverrideList();

            return SendQueuedMessages(filters, overrides, true);
        }
コード例 #2
0
        public void BodyExactFilterResults()
        {
            var filters = new DequeueFilterList();

            var result = filters.And(new BodyExactFilter("Test Message - EXACTSEARCH")).Filter(Repository).Select(r => r.ID);
            var expected = new int[] { 3 };

            Assert.That(AreArraysEqual(result, expected));
        }
コード例 #3
0
        public void BodyContainsFilterResults()
        {
            var filters = new DequeueFilterList();

            var result = filters.And(new BodyContainsFilter("SEARCHSTRING")).Filter(Repository).Select(r => r.ID);
            var expected = new int[] { 2 };

            Assert.That(AreArraysEqual(result, expected));
        }
コード例 #4
0
        public void IdDequeueFilterResults()
        {
            var filters = new DequeueFilterList();

            var result = filters.And(new IdDequeueFilter(1)).Filter(Repository).Select(r => r.ID);
            var expected = new int[] { 1 };

            Assert.That(AreArraysEqual(result, expected));
        }
コード例 #5
0
        public void MultipleAttachmentsAreSent()
        {
            MailMessageQueue queue = new MailMessageQueue(Repository, AttachmentFileSystem);
            MailMessageDequeuer dequeuer = new MailMessageDequeuer(Config, SmtpClient, Repository, AttachmentFileSystem, StaticOverridesProvider);

            var mm = new MailMessage();
            mm.Attachments.Add(new Attachment(Path.Combine(Environment.CurrentDirectory, @"testingfiles\sample.pdf")));
            mm.Attachments.Add(new Attachment(Path.Combine(Environment.CurrentDirectory, @"testingfiles\sample.txt")));

            queue.EnqueueMessage(mm);

            var emailQueueItem = Repository.Fetch().First();

            var fl = new DequeueFilterList();
            fl.And(new IdDequeueFilter(emailQueueItem.ID));

            var result = dequeuer.SendQueuedMessages(fl, new OverrideList());

            Assert.IsNotNull(result, "Result is null");
            Assert.IsNotNull(result.FirstOrDefault(), "0 results were received");
            Assert.IsNotNull(result.FirstOrDefault().SentMailMessage, "Mail Message of result is null");
            Assert.AreEqual(2, result.FirstOrDefault().SentMailMessage.Attachments.Count, "Attachment count is incorrect");

            string originalFile;
            using (StreamReader sr = new StreamReader(Path.Combine(Environment.CurrentDirectory, @"testingfiles\sample.pdf")))
            {
                originalFile = sr.ReadToEnd();
            }

            string newFile;
            using (StreamReader sr = new StreamReader(result.FirstOrDefault().SentMailMessage.Attachments[0].ContentStream))
            {
                newFile = sr.ReadToEnd();
            }

            Assert.AreEqual(originalFile, newFile, "provided and sent attachments are not identical");


            using (StreamReader sr = new StreamReader(Path.Combine(Environment.CurrentDirectory, @"testingfiles\sample.txt")))
            {
                originalFile = sr.ReadToEnd();
            }

            using (StreamReader sr = new StreamReader(result.FirstOrDefault().SentMailMessage.Attachments[1].ContentStream))
            {
                newFile = sr.ReadToEnd();
            }

            Assert.AreEqual(originalFile, newFile, "provided and sent attachments are not identical");
        }
コード例 #6
0
        protected override bool ParseArguments(string[] args)
        {
            filterList = new DequeueFilterList();
            bool dateRangeApplied = false;
            DateTime dateFrom = DateTime.MinValue, dateTo = DateTime.MaxValue;
            bool idRangeApplied = false;
            int idMin = 0, idMax = int.MaxValue;

            OptionSet optionSet = new OptionSet()
                //filters
                .Add("tf=|tofilter=", v => filterList.And(new ToFilter(v)))
                .Add("bcf=|bodycontainsfilter=", v => filterList.And(new BodyContainsFilter(v)))
                .Add("bef=|bodyexactfilter=", v => filterList.And(new BodyExactFilter(v)))
                .Add("fd=|fromdate=", (DateTime v) => { dateRangeApplied = true; dateFrom = v; })
                .Add("td=|todate=", (DateTime v) => { dateRangeApplied = true; dateTo = v; })
                .Add("idf=|idfilter=|id=", (int v) => filterList.And(new IdDequeueFilter(v)))
                .Add("rtf=|retriesfilter=", (byte v) => filterList.And(new RetriesFilter(v)))
                .Add("sent=|sentfilter=|issent=", (bool v) => filterList.And(new SentStatusDequeueFilter(v)))
                .Add("scf=|subjectcontainsfilter=", v => filterList.And(new SubjectContainsFilter(v)))
                .Add("sef=|subjectexactfilter=", v => filterList.And(new SubjectExactFilter(v)))
                .Add("idrf=|idfrom=", (int v) => { idRangeApplied = true; idMin = v; })
                .Add("idrt=|idto=", (int v) => { idRangeApplied = true; idMax = v; })
                .Add("haf|hasattachmentsfilter", "filter on whether an email has attachments", v => filterList.And(new HasAttachmentsFilter(true)))

                .Add("p|purge", "purges attachments from storage (default=false)" , v => Purge = true)
                ;

            try
            {
                optionSet.Parse(args);
            }
            catch (OptionException)
            {
                Console.WriteLine("Error");
                return false;
            }

            if (dateRangeApplied)
            {
                filterList.And(new DateRangeFilter(dateFrom, dateTo));
            }

            if (idRangeApplied)
            {
                filterList.And(new IdRangeDequeueFilter(idMin, idMax));
            }

            return true;
        }
コード例 #7
0
        public void CanFilterTwice()
        {
            var filters = new DequeueFilterList();

            var result = filters.And(new IdDequeueFilter(1)).Filter(Repository).Select(r => r.ID);
            var expected = new int[] { 1 };

            Assert.That(AreArraysEqual(result, expected));

            //do it again with the same filterset
            result = filters.Filter(Repository).Select(r => r.ID);
            expected = new int[] { 1 };

            Assert.That(AreArraysEqual(result, expected));
        }
コード例 #8
0
        /// <summary>
        /// Sends the messages which match the filters and applies the overrides prior to sending
        /// </summary>
        /// <param name="filters"></param>
        /// <param name="overrides"></param>
        /// <param name="audit">whether to change the sent status and number of tries for an email</param>
        /// <returns></returns>
        public IEnumerable<DequeueResultItem> SendQueuedMessages(DequeueFilterList filters, OverrideList overrides, bool audit = true)
        {
            if(filters == null) throw new ArgumentNullException("filters");
            if(overrides == null) throw new ArgumentNullException("overrides");

            TroutLog.Log.Info(string.Format("Beginning dequeuing with{0} auditing at", audit ? "" : "out"));

            List<DequeueResultItem> results = new List<DequeueResultItem>();
            var messages = filters.Filter(Repository);

            foreach (var message in messages.ToList())
            {
                MailMessage mailMessage = GetMailMessage(message, overrides);

                foreach (var attachment in AttachmentFileSystem.GetAttachments(message))
                {
                    mailMessage.Attachments.Add(attachment);
                } 

                var result = SmtpClient.Send(mailMessage);
                results.Add(new DequeueResultItem(message, result.IsSuccess, result.Message, mailMessage, result.Tries));

                TroutLog.Log.Info(string.Format("{0} was {1}sent with message - {2} after {3} tries.", message.ID, result.IsSuccess ? "" : "not ", result.Message, result.Tries));

                if (audit)
                {
                    if (result.IsSuccess)
                    {
                        message.IsSent = true;
                        message.SendDate = DateTime.Now;
                    }
                    else
                    {
                        message.IsSent = false;
                        message.SendDate = null;
                    }

                    message.NumberTries++;
                    message.LastTryDate = DateTime.Now;
                }
            }

            TroutLog.Log.Info(string.Format("Saving of dequeue results"));
            Repository.SaveChanges();


            return results;
        }
コード例 #9
0
        public void StaticOverridesAreApplied()
        {
            var testingStaticOverrides = new OverrideList();
            testingStaticOverrides.Add(new ToOverride().Prepend("*****@*****.**"));
            testingStaticOverrides.Add(new CcOverride().Prepend("*****@*****.**"));
            testingStaticOverrides.Add(new BccOverride().Prepend("*****@*****.**"));
            testingStaticOverrides.Add(new SubjectOverride().Prepend("SubjectSpecialString"));
            testingStaticOverrides.Add(new BodyOverride().Prepend("BodySpecialString"));

            var staticOverridesProviderMock = new Mock<IStaticOverridesProvider>();
            staticOverridesProviderMock.Setup(m => m.StaticOverrides).Returns(testingStaticOverrides);

            MailMessageQueue queue = new MailMessageQueue(Repository, AttachmentFileSystem);
            MailMessageDequeuer dequeuer = new MailMessageDequeuer(Config, SmtpClient, Repository, AttachmentFileSystem, staticOverridesProviderMock.Object);

            var mm = new MailMessage();

            queue.EnqueueMessage(mm);

            var emailQueueItem = Repository.Fetch().First();

            var fl = new DequeueFilterList();
            fl.And(new IdDequeueFilter(emailQueueItem.ID));

            var result = dequeuer.SendQueuedMessages(fl, new OverrideList());

            var sent = result.First().SentMailMessage;

            Assert.AreEqual("*****@*****.**", sent.To.ToString(), "Static To Override was not applied");
            Assert.AreEqual("*****@*****.**", sent.CC.ToString(), "Static Cc Override was not applied");
            Assert.AreEqual("*****@*****.**", sent.Bcc.ToString(), "Static Bcc Override was not applied");
            Assert.AreEqual("SubjectSpecialString", sent.Subject, "Static Subject Override was not applied");
            Assert.AreEqual("BodySpecialString", sent.Body, "Static Body Override was not applied");
        }
コード例 #10
0
        /// <summary>
        /// Returns emails which match the filter with the provided overrides applied.
        /// </summary>
        /// <param name="filters"></param>
        /// <param name="overrides"></param>
        /// <returns></returns>
        public IEnumerable<DequeueListItem> GetQueuedMessages(DequeueFilterList filters, OverrideList overrides)
        {
            if (filters == null) throw new ArgumentNullException("filters");
            if (overrides == null) throw new ArgumentNullException("overrides");

            TroutLog.Log.Info(string.Format("Retrieving messages"));

            List<DequeueListItem> results = new List<DequeueListItem>();

            var messages = filters.Filter(Repository);

            foreach (var message in messages.ToList())
            {
                MailMessage mailMessage = GetMailMessage(message, overrides);

                results.Add(new DequeueListItem(message, mailMessage));
            }

            TroutLog.Log.Info(string.Format("Retrieved {0} messages", results.Count));

            return results;
        }
コード例 #11
0
        protected override bool ParseArguments(string[] args)
        {
            filterList = new DequeueFilterList();
            overrideList = new OverrideList();

            bool dateRangeApplied = false;
            DateTime dateFrom = DateTime.MinValue, dateTo = DateTime.MaxValue;
            bool idRangeApplied = false;
            int idMin = 0, idMax = int.MaxValue;

            OptionSet optionSet = new OptionSet()
                //filters
                .Add("tf=|tofilter=", v => filterList.And(new ToFilter(v)))
                .Add("bcf=|bodycontainsfilter=", v => filterList.And(new BodyContainsFilter(v)))
                .Add("bef=|bodyexactfilter=", v => filterList.And(new BodyExactFilter(v)))
                .Add("fd=|fromdate=", (DateTime v) => { dateRangeApplied = true; dateFrom = v; })
                .Add("td=|todate=", (DateTime v) => { dateRangeApplied = true; dateTo = v; })
                .Add("idf=|idfilter=|id=", (int v) => filterList.And(new IdDequeueFilter(v)))
                .Add("rtf=|retriesfilter=", (byte v) => filterList.And(new RetriesFilter(v)))
                .Add("sent=|sentfilter=|issent=", (bool v) => filterList.And(new SentStatusDequeueFilter(v)))
                .Add("scf=|subjectcontainsfilter=", v => filterList.And(new SubjectContainsFilter(v)))
                .Add("sef=|subjectexactfilter=", v => filterList.And(new SubjectExactFilter(v)))
                .Add("idrf=|idfrom=", (int v) => { idRangeApplied = true; idMin = v; })
                .Add("idrt=|idto=", (int v) => { idRangeApplied = true; idMax = v; })
                .Add("haf|hasattachmentsfilter", "filter on whether an email has attachments", v => filterList.And(new HasAttachmentsFilter(true)))

                //overrides
                .Add("to=|tooverride=", v=> overrideList.Add(new ToOverride().Override(v)))
                .Add("cc=|ccoverride=", v => overrideList.Add(new CcOverride().Override(v)))
                .Add("bcc=|bccoverride=", v => overrideList.Add(new BccOverride().Override(v)))
                .Add("subject=|subjectoverride=", v => overrideList.Add(new SubjectOverride().Override(v)))
                .Add("body=|bodyoverride=", v => overrideList.Add(new BodyOverride().Override(v)))

                .Add("toa=|toappend=", v => overrideList.Add(new ToOverride().Append(v)))
                .Add("cca=|ccappend=", v => overrideList.Add(new CcOverride().Append(v)))
                .Add("bcca=|bccappend=", v => overrideList.Add(new BccOverride().Append(v)))
                .Add("subjecta=|subjectappend=", v => overrideList.Add(new SubjectOverride().Append(v)))
                .Add("bodya=|bodyappend=", v => overrideList.Add(new BodyOverride().Append(v)))

                .Add("top=|toprepend=", v => overrideList.Add(new ToOverride().Prepend(v)))
                .Add("ccp=|ccprepend=", v => overrideList.Add(new CcOverride().Prepend(v)))
                .Add("bccp=|bccprepend=", v => overrideList.Add(new BccOverride().Prepend(v)))
                .Add("subjectp=|subjectprepend=", v => overrideList.Add(new SubjectOverride().Prepend(v)))
                .Add("bodyp=|bodyprepend=", v => overrideList.Add(new BodyOverride().Prepend(v)))

                .Add("da|donotaudit", "whether to audit whether the email was sent (default=true)" , v => Audit = false)
                ;

            try
            {
                optionSet.Parse(args);
            }
            catch (OptionException)
            {
                Console.WriteLine("Error");
                return false;
            }

            if (dateRangeApplied)
            {
                filterList.And(new DateRangeFilter(dateFrom, dateTo));
            }

            if (idRangeApplied)
            {
                filterList.And(new IdRangeDequeueFilter(idMin, idMax));
            }

            return true;
        }
コード例 #12
0
        public void RetriesFilterResults()
        {
            var filters = new DequeueFilterList();

            var result = filters.And(new RetriesFilter(0)).Filter(Repository).Select(r => r.ID);
            var expected = new int[] {  };

            Assert.That(AreArraysEqual(result, expected));

            filters = new DequeueFilterList();

            result = filters.And(new RetriesFilter(1)).Filter(Repository).Select(r => r.ID);
            expected = new int[] { 3 };

            Assert.That(AreArraysEqual(result, expected));

            filters = new DequeueFilterList();

            result = filters.And(new RetriesFilter(6)).Filter(Repository).Select(r => r.ID);
            expected = new int[] {1, 2, 3};

            Assert.That(AreArraysEqual(result, expected));
        }
コード例 #13
0
        public void DateRangeFilterResults()
        {
            var filters = new DequeueFilterList();

            var result = filters.And(new DateRangeFilter(DateTime.Now.AddDays(1), DateTime.Now.AddDays(2))).Filter(Repository).Select(r => r.ID);
            var expected = new int[] { 3 };

            Assert.That(AreArraysEqual(result, expected));
        }
コード例 #14
0
        public void SubjectExactFilterResults()
        {
            var filters = new DequeueFilterList();

            var result = filters.And(new SubjectExactFilter("EXACTSUBJECTSTRING")).Filter(Repository).Select(r => r.ID);
            var expected = new int[] { 3 };

            Assert.That(AreArraysEqual(result, expected));
        }
コード例 #15
0
        public void SentStatusFilterResults()
        {
            var filters = new DequeueFilterList();

            var result = filters.And(new SentStatusDequeueFilter(false)).Filter(Repository).Select(r => r.ID);
            var expected = new int[] {2, 3};

            Assert.That(AreArraysEqual(result, expected));

            filters = new DequeueFilterList();

            result = filters.And(new SentStatusDequeueFilter(true)).Filter(Repository).Select(r => r.ID);
            expected = new int[] { 1 };

            Assert.That(AreArraysEqual(result, expected));
        }