Beispiel #1
0
        public void TestArgumentExceptions()
        {
            Assert.Throws <ArgumentNullException> (() => SearchQuery.And(null, SearchQuery.All));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.And(SearchQuery.All, null));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.BccContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.BccContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.BodyContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.BodyContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.CcContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.CcContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.DoesNotHaveCustomFlag(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.DoesNotHaveCustomFlag(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.DoesNotHaveCustomFlags(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.DoesNotHaveFlags(MessageFlags.None));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.Filter(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.Filter(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.FromContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.FromContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.Fuzzy(null));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.GMailRawSearch(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.GMailRawSearch(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HasCustomFlag(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.HasCustomFlag(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HasCustomFlags(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.HasFlags(MessageFlags.None));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HasGMailLabel(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.HasGMailLabel(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HeaderContains(null, "text"));
            Assert.Throws <ArgumentException> (() => SearchQuery.HeaderContains(string.Empty, "text"));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HeaderContains("name", null));
            Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.LargerThan(-1));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.MessageContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.MessageContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.Not(null));
            Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.OlderThan(-1));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.Or(null, SearchQuery.All));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.Or(SearchQuery.All, null));
            Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.SmallerThan(-1));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.SubjectContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.SubjectContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.ToContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.ToContains(string.Empty));
            Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.YoungerThan(-1));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.All.And(null));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.All.Or(null));

            Assert.Throws <ArgumentNullException> (() => new BinarySearchQuery(SearchTerm.And, null, SearchQuery.All));
            Assert.Throws <ArgumentNullException> (() => new BinarySearchQuery(SearchTerm.And, SearchQuery.All, null));
            Assert.Throws <ArgumentNullException> (() => new FilterSearchQuery(null));
            Assert.Throws <ArgumentException> (() => new FilterSearchQuery(string.Empty));
            Assert.Throws <ArgumentNullException> (() => new HeaderSearchQuery(null, "text"));
            Assert.Throws <ArgumentException> (() => new HeaderSearchQuery(string.Empty, "text"));
            Assert.Throws <ArgumentNullException> (() => new HeaderSearchQuery("name", null));
            Assert.Throws <ArgumentNullException> (() => new TextSearchQuery(SearchTerm.BodyContains, null));
            Assert.Throws <ArgumentNullException> (() => new UidSearchQuery(null));
            Assert.Throws <ArgumentException> (() => new UidSearchQuery(new UniqueIdSet()));
            Assert.Throws <ArgumentException> (() => new UidSearchQuery(UniqueId.Invalid));
            Assert.Throws <ArgumentNullException> (() => new UnarySearchQuery(SearchTerm.Not, null));
        }
        public override void RunCommand(object sender)
        {
            var engine = (IAutomationEngineInstance)sender;

            string vIMAPHost                = v_IMAPHost.ConvertUserVariableToString(engine);
            string vIMAPPort                = v_IMAPPort.ConvertUserVariableToString(engine);
            string vIMAPUserName            = v_IMAPUserName.ConvertUserVariableToString(engine);
            string vIMAPPassword            = ((SecureString)v_IMAPPassword.ConvertUserVariableToObject(engine, nameof(v_IMAPPassword), this)).ConvertSecureStringToString();
            string vIMAPSourceFolder        = v_IMAPSourceFolder.ConvertUserVariableToString(engine);
            string vIMAPFilter              = v_IMAPFilter.ConvertUserVariableToString(engine);
            string vIMAPMessageDirectory    = v_IMAPMessageDirectory.ConvertUserVariableToString(engine);
            string vIMAPAttachmentDirectory = v_IMAPAttachmentDirectory.ConvertUserVariableToString(engine);

            using (var client = new ImapClient())
            {
                client.ServerCertificateValidationCallback = (sndr, certificate, chain, sslPolicyErrors) => true;
                client.SslProtocols = SslProtocols.None;

                using (var cancel = new CancellationTokenSource())
                {
                    try
                    {
                        client.Connect(vIMAPHost, int.Parse(vIMAPPort), true, cancel.Token);                         //SSL
                    }
                    catch (Exception)
                    {
                        client.Connect(vIMAPHost, int.Parse(vIMAPPort));                         //TLS
                    }

                    client.AuthenticationMechanisms.Remove("XOAUTH2");
                    client.Authenticate(vIMAPUserName, vIMAPPassword, cancel.Token);

                    IMailFolder toplevel    = client.GetFolder(client.PersonalNamespaces[0]);
                    IMailFolder foundFolder = FindFolder(toplevel, vIMAPSourceFolder);

                    if (foundFolder != null)
                    {
                        foundFolder.Open(FolderAccess.ReadWrite, cancel.Token);
                    }
                    else
                    {
                        throw new Exception("Source Folder not found");
                    }

                    SearchQuery query;
                    if (vIMAPFilter.ToLower() == "none")
                    {
                        query = SearchQuery.All;
                    }
                    else if (!string.IsNullOrEmpty(vIMAPFilter.Trim()))
                    {
                        query = SearchQuery.MessageContains(vIMAPFilter)
                                .Or(SearchQuery.SubjectContains(vIMAPFilter))
                                .Or(SearchQuery.FromContains(vIMAPFilter))
                                .Or(SearchQuery.BccContains(vIMAPFilter))
                                .Or(SearchQuery.BodyContains(vIMAPFilter))
                                .Or(SearchQuery.CcContains(vIMAPFilter))
                                .Or(SearchQuery.ToContains(vIMAPFilter));
                    }
                    else
                    {
                        throw new NullReferenceException("Filter not specified");
                    }

                    if (v_IMAPGetUnreadOnly == "Yes")
                    {
                        query = query.And(SearchQuery.NotSeen);
                    }

                    var filteredItems = foundFolder.Search(query, cancel.Token);

                    List <MimeMessage> outMail = new List <MimeMessage>();

                    foreach (UniqueId uid in filteredItems)
                    {
                        if (v_IMAPMarkAsRead == "Yes")
                        {
                            foundFolder.AddFlags(uid, MessageFlags.Seen, true);
                        }

                        MimeMessage message = foundFolder.GetMessage(uid, cancel.Token);

                        if (v_IMAPSaveMessagesAndAttachments == "Yes")
                        {
                            ProcessEmail(message, vIMAPMessageDirectory, vIMAPAttachmentDirectory);
                        }

                        message.MessageId = $"{vIMAPSourceFolder}#{uid}";
                        outMail.Add(message);
                    }
                    outMail.StoreInUserVariable(engine, v_OutputUserVariableName, nameof(v_OutputUserVariableName), this);

                    client.Disconnect(true, cancel.Token);
                    client.ServerCertificateValidationCallback = null;
                }
            }
        }
        public SearchQuery CreateSearchQuery()
        {
            var query = new SearchQuery();

            query = ApplyBool(query, Answered, SearchQuery.Answered, SearchQuery.NotAnswered);
            query = ApplyBool(query, Recent, SearchQuery.Recent, SearchQuery.NotRecent);
            query = ApplyBool(query, Deleted, SearchQuery.Deleted, SearchQuery.NotDeleted);
            query = ApplyBool(query, Flagged, SearchQuery.Flagged, SearchQuery.NotFlagged);
            query = ApplyBool(query, Seen, SearchQuery.Seen, SearchQuery.NotSeen);
            query = ApplyBool(query, New, SearchQuery.New, SearchQuery.Not(SearchQuery.New));             // TODO: Not(New) ??

            if (Bcc != null)
            {
                query = query.And(SearchQuery.BccContains(Bcc));
            }

            if (Cc != null)
            {
                query = query.And(SearchQuery.CcContains(Cc));
            }

            if (To != null)
            {
                query = query.And(SearchQuery.ToContains(To));
            }

            if (From != null)
            {
                query = query.And(SearchQuery.ToContains(From));
            }

            if (Subject != null)
            {
                query = query.And(SearchQuery.ToContains(Subject));
            }

            if (Text != null)
            {
                query = query.And(SearchQuery.ToContains(Text));
            }

            if (Body != null)
            {
                query = query.And(SearchQuery.ToContains(Body));
            }

            if (PostDating != null)
            {
                query = query.And(SearchQuery.SentOn((DateTime)PostDating));
            }

            if (BeforeDateOfPosting != null)
            {
                query = query.And(SearchQuery.SentBefore((DateTime)BeforeDateOfPosting));
            }

            if (AfterDateOfPosting != null)
            {
                query = query.And(SearchQuery.SentAfter((DateTime)AfterDateOfPosting));
            }

            return(query);
        }
Beispiel #4
0
        public void TestArgumentExceptions()
        {
            Assert.Throws <ArgumentNullException> (() => SearchQuery.And(null, SearchQuery.All));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.And(SearchQuery.All, null));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.AnnotationsContain(null, AnnotationAttribute.Value, "value"));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.AnnotationsContain(AnnotationEntry.AltSubject, null, "value"));
            Assert.Throws <ArgumentException> (() => SearchQuery.AnnotationsContain(AnnotationEntry.AltSubject, AnnotationAttribute.Size, "value"));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.BccContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.BccContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.BodyContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.BodyContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.CcContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.CcContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.DoesNotHaveCustomFlag(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.DoesNotHaveCustomFlag(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.DoesNotHaveCustomFlags(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.DoesNotHaveCustomFlags(new string[0]));
            Assert.Throws <ArgumentException> (() => SearchQuery.DoesNotHaveFlags(MessageFlags.None));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.Filter(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.Filter(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.FromContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.FromContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.Fuzzy(null));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.GMailRawSearch(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.GMailRawSearch(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HasCustomFlag(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.HasCustomFlag(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HasCustomFlags(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.HasCustomFlags(new string[0]));
            Assert.Throws <ArgumentException> (() => SearchQuery.HasFlags(MessageFlags.None));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HasKeyword(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.HasKeyword(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HasKeywords(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.HasKeywords(new string[0]));
            Assert.Throws <ArgumentException> (() => SearchQuery.HasKeywords(new string[] { "keyword", null }));
            Assert.Throws <ArgumentException> (() => SearchQuery.NotFlags(MessageFlags.None));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.NotKeyword(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.NotKeyword(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.NotKeywords(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.NotKeywords(new string[0]));
            Assert.Throws <ArgumentException> (() => SearchQuery.NotKeywords(new string [] { "keyword", null }));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HasGMailLabel(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.HasGMailLabel(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HeaderContains(null, "text"));
            Assert.Throws <ArgumentException> (() => SearchQuery.HeaderContains(string.Empty, "text"));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.HeaderContains("name", null));
            Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.LargerThan(-1));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.MessageContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.MessageContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.Not(null));
            Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.OlderThan(-1));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.Or(null, SearchQuery.All));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.Or(SearchQuery.All, null));
            Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.SmallerThan(-1));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.SubjectContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.SubjectContains(string.Empty));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.ToContains(null));
            Assert.Throws <ArgumentException> (() => SearchQuery.ToContains(string.Empty));
            Assert.Throws <ArgumentOutOfRangeException> (() => SearchQuery.YoungerThan(-1));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.All.And(null));
            Assert.Throws <ArgumentNullException> (() => SearchQuery.All.Or(null));

            Assert.Throws <ArgumentNullException> (() => new BinarySearchQuery(SearchTerm.And, null, SearchQuery.All));
            Assert.Throws <ArgumentNullException> (() => new BinarySearchQuery(SearchTerm.And, SearchQuery.All, null));
            Assert.Throws <ArgumentNullException> (() => new FilterSearchQuery(null));
            Assert.Throws <ArgumentException> (() => new FilterSearchQuery(string.Empty));
            Assert.Throws <ArgumentException> (() => new FilterSearchQuery(MetadataTag.Create("/dev/null")));
            Assert.Throws <ArgumentNullException> (() => new HeaderSearchQuery(null, "text"));
            Assert.Throws <ArgumentException> (() => new HeaderSearchQuery(string.Empty, "text"));
            Assert.Throws <ArgumentNullException> (() => new HeaderSearchQuery("name", null));
            Assert.Throws <ArgumentNullException> (() => new TextSearchQuery(SearchTerm.BodyContains, null));
            Assert.Throws <ArgumentNullException> (() => new UidSearchQuery(null));
            Assert.Throws <ArgumentException> (() => new UidSearchQuery(new UniqueIdSet()));
            Assert.Throws <ArgumentException> (() => new UidSearchQuery(UniqueId.Invalid));
            Assert.Throws <ArgumentNullException> (() => new UnarySearchQuery(SearchTerm.Not, null));
        }