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 BuildSharedBodyText(LessonsLearnedItem item)
 {
     _Body += "<div class='content'>" +
              "<table class='mainTable'>" +
              "<tr>" +
              "<th colspan='2'>" +
              "<h1>" +
              "Lessons Learned" +
              "</h1>" +
              "</th>" +
              "</tr>" +
              "<tr>" +
              "<td>" +
              "<h3>Title</h3>" +
              "</td>" +
              "<td>" +
              "<p>" + item.Title + "</p>" +
              "</td>" +
              "</tr>" +
              "<tr>" +
              "<td>" +
              "<h3>Project</h3>" +
              "</td>" +
              "<td>" +
              "<p>" + item.Project + "</p>" +
              "</td>" +
              "</tr>" +
              "<tr>" +
              "<td>" +
              "<h3>Lesson Type</h3>" +
              "</td>" +
              "<td>" +
              "<p>" + item.LessonType + "</p>" +
              "</td>" +
              "</tr>" +
              "<tr>" +
              "<td>" +
              "<h3>Date</h3>" +
              "</td>" +
              "<td>" +
              "<p>" + item.Date + "</p>" +
              "</td>" +
              "</tr>" +
              "<tr>" +
              "<td>" +
              "<h3>Keyword(s)</h3>" +
              "</td>" +
              "<td>" +
              "<p>" + item.Keywords + "</p>" +
              "</td>" +
              "</tr>" +
              "<tr>" +
              "<td>" +
              "<h3>Issue</h3>" +
              "</td>" +
              "<td>" +
              "<p>" + item.Issue + "</p>" +
              "</td>" +
              "</tr>" +
              "<tr>" +
              "<td>" +
              "<h3>Resolution</h3>" +
              "</td>" +
              "<td>" +
              "<p>" + item.Resolution + "</p>" +
              "</td>" +
              "</tr>" +
              "<tr>" +
              "<td>" +
              "<h3>Innovator</h3>" +
              "</td>" +
              "<td>" +
              "<p>" + item.Innovator + "</p>" +
              "</td>" +
              "</tr>" +
              "<tr>" +
              "<td>" +
              "<h3>Attachment(s)</h3>" +
              "</td>" +
              "<td>" +
              "<p>" + Shared.ProcessStringHTML(item.attachmentOthersHTML) + "</p>" +
              "</td>" +
              "</tr>" +
              "<tr>" +
              "<td colspan='2' style='text-align:center'>" +
              "<a href='" + item.clickToLink + "' target='_blank'>" + item.clickToText + "</a> " +
              "</td>" +
              "</tr>" +
              "</table>" +
              "<h2>Images</h2>" + Shared.ProcessStringHTML(item.attachmentImagesHTML) +
              "</div><p><i>This is an auto-generated email, please do not reply</i></p></body></html>";
 }
        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;
            }
            }
        }