public LessonsLearnedEmail(LessonsLearnedType type, LessonsLearnedItem item, string comments = "")
        {
            _Bcc         = new MailAddressCollection();
            _To          = new MailAddressCollection();
            _Attachments = new System.Collections.Generic.List <Attachment>();

            InitializeBodyWithHead();
            BuildBodyHeaderText(type, item.Title, comments);
            BuildSharedBodyText(item);
        }
        private void BuildBodyHeaderText(LessonsLearnedType type, string title, string comments = "")
        {
            switch (type)
            {
            case LessonsLearnedType.Review:
                _Body += "<p><span style='font-weight:bold'>" + title + "</span> is being submitted for your approval, please review and click the link at the bottom to approve or reject</p>";
                break;

            case LessonsLearnedType.Approved:
                _Body += "<p><span style='font-weight:bold'>" + title + "</span> has been approved by OB Review. Please look below for any comments</p>" +
                         "<table><tr><td><h3>Comments:</h3></td><td><p>" + Shared.ProcessStringHTML(comments) + "</p></td></tr></table><hr>";
                break;

            case LessonsLearnedType.Rejected:
                _Body += "<p><span style='font-weight:bold'>" + title + "</span> has been rejected by OB Review. Please look below for any comments</p>" +
                         "<table><tr><td><h3>Comments:</h3></td><td><p>" + Shared.ProcessStringHTML(comments) + "</p></td></tr></table><hr>";
                break;

            case LessonsLearnedType.Published:
                _Body += "<p>This item <span style='font-weight:bold'>" + title + "</span> has been published by OB Review</p>";
                break;
            }
        }
        public SharePointLessonsLearnedEmail(ListItem oListItem, string fromAddress, string[] publishAddresses, string[] reviewerAddresses)
        {
            ClientContext ctx = (ClientContext)oListItem.Context;

            LessonsLearnedType type = LessonsLearnedType.Published;

            string clickToLink = "";
            string clickToText = "";
            string subject     = "";
            string comments    = "";

            // build subject and links as appropriate for message


            //Get parent list for link to pages
            List parentList = oListItem.ParentList;

            ctx.Load(parentList, l => l.DefaultDisplayFormUrl, l => l.DefaultEditFormUrl);
            ctx.ExecuteQuery();


            switch (Lists.GetApprovalStatusField(oListItem))
            {
            case "Pending":
                type = LessonsLearnedType.Review;

                subject = "Lessons Learned - Item for Review";

                clickToLink = oListItem.Context.Url + formPath + "approve.aspx?List={" + parentList.Id.ToString() + "}&ID=" + oListItem.Id.ToString();
                clickToText = "Click here to approve / reject this item";

                break;

            case "Approved":
                type = LessonsLearnedType.Approved;

                subject  = "Lessons Learned - Item Approved";
                comments = Lists.GetStringField(oListItem, "_ModerationComments");

                clickToLink = oListItem.Context.Url + libraryName + "DispForm.aspx?ID=" + oListItem.Id.ToString();
                clickToText = "Click here to view your item";

                break;

            case "Rejected":
                type = LessonsLearnedType.Rejected;

                subject  = "Lessons Learned - Item Rejected";
                comments = Lists.GetStringField(oListItem, "_ModerationComments");


                clickToLink = oListItem.Context.Url + libraryName + "EditForm.aspx?ID=" + oListItem.Id.ToString();

                clickToText = "Click here to edit your item";


                break;

            case "Published":
                type = LessonsLearnedType.Published;

                subject = "Lessons Learned";


                clickToLink = oListItem.Context.Url + libraryName + "DispForm.aspx?ID=" + oListItem.Id.ToString();
                clickToText = "Click here to view this item";

                break;
            }

            //process E-mail attachments
            AddAttachments(oListItem);

            LessonsLearnedItem item = new LessonsLearnedItem();

            item.Title                = oListItem["Title"].ToString();
            item.Project              = Lists.GetLookupFieldSingle(oListItem, LessonsLearnedLists.PROJECTFIELDNAME);
            item.LessonType           = Lists.GetStringField(oListItem, LessonsLearnedLists.LESSONTYPEFIELDNAME);
            item.Date                 = Lists.GetDateField(oListItem, LessonsLearnedLists.DATEFIELDNAME);
            item.Keywords             = Lists.GetLookupFieldMulti(oListItem, LessonsLearnedLists.KEYWORDSFIELDNAME);
            item.Issue                = Lists.GetStringField(oListItem, LessonsLearnedLists.ISSUEFIELDNAME);
            item.Resolution           = Lists.GetStringField(oListItem, LessonsLearnedLists.RESOLUTIONFIELDNAME);
            item.Innovator            = Lists.GetStringField(oListItem, LessonsLearnedLists.INNOVATORFIELDNAME);
            item.clickToLink          = clickToLink;
            item.clickToText          = clickToText;
            item.attachmentImagesHTML = attachmentImagesHTML;
            item.attachmentOthersHTML = attachmentOthersHTML;

            email = new LessonsLearnedEmail(type, item, comments);


            // add attachments
            foreach (System.Net.Mail.Attachment a in Attachments)
            {
                email.Attachment = a;
            }

            // fill in Subject, To, From

            email.Subject = subject;
            email.From    = fromAddress;

            switch (type)
            {
            case LessonsLearnedType.Review:
            {
                foreach (string reviewerAddress in reviewerAddresses)
                {
                    email.To = reviewerAddress;
                }

                break;
            }

            case LessonsLearnedType.Published:
            {
                foreach (string publishAddress in publishAddresses)
                {
                    email.Bcc = publishAddress;
                }
                email.To = Lists.GetCreatorEmail(oListItem, ctx);

                break;
            }

            case LessonsLearnedType.Approved:
            case LessonsLearnedType.Rejected:
            {
                email.To = Lists.GetCreatorEmail(oListItem, ctx);

                break;
            }
            }
        }