Exemplo n.º 1
0
        //PARSE THE STRING
        //LOOK FOR KEYWORDS LIKE Milestone, Estimated Start Time, Resources,
        //get the value after keyword and put that in variable to add to SP list
        public void parseEmail(Program prog, ExchangeService service)
        {
            //Program prog = new Program();
            string       aLine          = null;
            StringReader strReader      = new StringReader(this.getMBody());
            int          actualCount    = 0;
            int          milestoneCount = 0;

            Console.WriteLine("the private variable is: " + this.mProjectTitle);
            aLine = strReader.ReadLine();
            while (aLine != null)
            {
                //aLine.ToLower();
                //aLine = aLine.Replace(" ", String.Empty);

                aLine.Trim();
                if (aLine != null && aLine != "")
                {
                    //aParagraph = aParagraph + aLine + " ";
                    //Console.WriteLine("the line is: " + aLine);
                    string parsedValue = valueParser(aLine);
                    parsedValue = parsedValue.Trim();
                    if (aLine.Contains("Milestone"))
                    {
                        this.mCurrMilestone = new Milestone(0, "", "");
                        //setting milestone converts the string milestone to a milestone number
                        prog.setMMilestoneNum(parsedValue);
                        int pos = Convert.ToInt32(parsedValue);
                        this.mCurrMilestone.setNumber(pos);
                        Console.WriteLine("milestone is SET! " + prog.getMMilestoneNum(pos));
                        milestoneCount++;
                        //mMilestoneCurrentNum = pos;
                    }
                    //gets milestone command
                    //if command is remove, sets comment to ""
                    else if (aLine.Contains("Command"))
                    {
                        prog.setMMilestoneCommand(parsedValue);
                        this.mCurrMilestone.setCommand(parsedValue);
                        if (parsedValue == "Remove")
                        {
                            prog.setMMilestoneComment("");
                            this.mCurrMilestone.setComment("");
                            this.setMilestone();
                        }
                        Console.WriteLine("milestoneCommand is READY! " + prog.getMMilestoneCommand(mMilestoneCurrentNum));
                    }
                    //gets milestone comment and adds it to correlated position with command and num
                    //if there is no comment like when a remove command is given, comment is set to "" in command if statement
                    else if (aLine.Contains("Comment"))
                    {
                        prog.setMMilestoneComment(parsedValue);
                        Console.WriteLine("milestone is PERFECT! " + prog.getMMilestoneComment(mMilestoneCurrentNum));
                        this.mCurrMilestone.setComment(parsedValue);
                        this.setMilestone();
                    }
                    //calls helper function to retrieve estimated date and times
                    else if (aLine.Contains("Estimated"))
                    {
                        helperEstimatedParser(aLine, prog);
                    }
                    //gets actual date and time
                    else if (actualCount == 0)
                    {
                        helperActualParser(prog);
                        actualCount++;
                    }
                    //gets milestone comment
                    else if (aLine.Contains("Resources"))
                    {
                        prog.setMResources(parsedValue);
                        Console.WriteLine("Found the resources needed to be... " + prog.getMResources());
                    }
                    else if (aLine.Contains("Time Spent"))
                    {
                        prog.setMTimeSpent(parsedValue);
                        Console.WriteLine("Found the time spent as...  " + prog.getMTimeSpent());
                    }
                    else if (aLine.Contains("Current Status"))
                    {
                        prog.setMCurrentStatus(parsedValue);
                        Console.WriteLine("Found the current status as...  " + prog.getMCurrentStatus());
                    }
                    else if (aLine.Contains("Status Reason"))
                    {
                        prog.setMStatusReason(parsedValue);
                        Console.WriteLine("Found the status reason as...  " + prog.getMStatusReason());
                    }
                }
                aLine = strReader.ReadLine();
            }
            Sharepoint sp = new Sharepoint(prog);

            try
            {
                bool        isNewList  = false;
                EmailErrors emailError = sp.getMEmailErrors();
                isNewList = sp.TryGetList(prog.getMProjectTitle());
                sp.addAllData(prog.getMProjectTitle());
                //Dictionary<int, Milestone> newMilestoneObjMap = new Dictionary<int, Milestone>();
                this.setMilestoneObjMap(new Dictionary <int, Milestone>());
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Exemplo n.º 2
0
        static void Main()
        {
            try
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                //connect to exchange
                //autodiscoverurl
                //Service service = new Service();
                Program         prog    = new Program();
                ExchangeService service = prog.getMService();

                // Bind the Inbox folder to the service object.
                Microsoft.Exchange.WebServices.Data.Folder inbox = Microsoft.Exchange.WebServices.Data.Folder.Bind(service, WellKnownFolderName.Inbox);
                // The search filter to get unread email.
                Console.WriteLine("BEFORE");

                //TIP to create search filter
                //first create search collection list
                //add any search filter like a filter that looks for a certain email or checks if email is unread or read
                //then if you want more searches, create a new search filter that ANDS the previous list collection
                //then if you want to let's say check for a domain name in the email, create new list
                //with that new list, add new search filter & add previous filter
                //then create a new search filter and AND or OR it with previous collection
                //idea is this starts chaining filters together
                //Another tip: Make sure you properly use AND and OR...e.g. can't filter two email domains
                //  and say you want the substring to contain denali AND tmobile
                //  so you choose OR operator to say i want to filter for either domain

                //SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
                List <SearchFilter> searchANDFilter = new List <SearchFilter>();
                //searchANDFilter.Add(sf);
                ExtendedPropertyDefinition PidTagSenderSmtpAddress = new ExtendedPropertyDefinition(0x5D01, MapiPropertyType.String);
                //searchANDFilter.Add(new SearchFilter.ContainsSubstring(PidTagSenderSmtpAddress, "@denaliai.com"));
                searchANDFilter.Add(new SearchFilter.ContainsSubstring(PidTagSenderSmtpAddress, "@denaliai.com"));
                searchANDFilter.Add(new SearchFilter.ContainsSubstring(PidTagSenderSmtpAddress, "@usc.edu"));
                //Console.WriteLine("the address is: " + PidTagSenderSmtpAddress.PropertySet.Value.ToString());
                SearchFilter        domainSF          = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchANDFilter);
                List <SearchFilter> searchFinalFilter = new List <SearchFilter>();
                searchFinalFilter.Add(new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false)));
                searchFinalFilter.Add(domainSF);
                SearchFilter finalSF = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchFinalFilter);
                //new SearchFilter.ContainsSubstring(EmailMessageSchema.Sender, "@denaliai.com", ContainmentMode.Substring, ComparisonMode.IgnoreCase)
                //SearchFilter.ContainsSubstring subjectFilter = new SearchFilter.ContainsSubstring(EmailMessageSchema.Sender,"@denaliai.com", ContainmentMode.Substring, ComparisonMode.IgnoreCase);

                Console.WriteLine("AFTER");

                ItemView view = new ItemView(4);
                // Fire the query for the unread items.
                // This method call results in a FindItem call to EWS.
                view.PropertySet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Sender);
                view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
                //Queue<FindItemsResults<Item>> allEmails = new Queue<FindItemsResults<Item>>();
                //Queue<EmailMessage> allEmails = new Queue<EmailMessage>();
                FindItemsResults <Item> findResults = service.FindItems(WellKnownFolderName.Inbox, finalSF, view);

                try
                {
                    //allEmails.Enqueue(message);
                    MailItem     mail      = new MailItem();
                    Stack <Item> allEmails = new Stack <Item>();
                    foreach (Item item in findResults.Items)
                    {
                        allEmails.Push(item);
                    }
                    foreach (Item item in allEmails)
                    {
                        mail.loadMail(findResults, item, service, prog);
                        prog.setMailItem(mail);
                        prog.setMProjectTitle(mail.mSubject);
                        Console.WriteLine("&&&&&&&&&&&&&&&&&&&&&&&&the project title is: " + prog.getMProjectTitle());
                        if (mail.mIsAuthority == true)
                        { //idea is to send project report if authority is true
                          //EmailErrors ee = new EmailErrors(prog);
                          //ee.sendMilestoneErrorEmail();
                            try
                            {
                                Sharepoint sp         = new Sharepoint(prog);
                                string     fullReport = sp.createProjectReport(prog.getMProjectTitle());
                                //Create Response Email
                                mail.sendEmail(fullReport, prog.getMProjectTitle(), service);
                            }
                            catch (ServerException se)
                            {
                                if (se.Message.Contains("does not exist at site with URL"))
                                {
                                    EmailErrors ee = new EmailErrors(prog);
                                    ee.sendProjectDoesNotExistEmail(mail.mMailboxAddress);
                                }
                            }
                        }
                        else
                        {
                            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                            //doc.LoadHtml(body);
                            doc.LoadHtml(mail.mBody);
                            String fullBodyText = "";
                            foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()"))
                            {
                                if (node.InnerText != "")
                                {
                                    Console.WriteLine(node.InnerText);
                                    fullBodyText += "\n" + node.InnerText;
                                }
                            }
                            //fullBodyText = adjustString(fullBodyText);
                            prog.setMBody(fullBodyText);
                            //prog.setMProjectTitle(subject);
                            prog.setMProjectTitle(mail.mSubject);
                            Console.WriteLine("body is: " + prog.getMBody());
                            prog.parseEmail(prog, service);
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }