Ejemplo n.º 1
0
        public ActionResult TestEmail(MassEmailer m)
        {
            m.Body = GetBody(m.Body);
            if (Util.SessionTimedOut())
            {
                Session["massemailer"] = m;
                return(Content("timeout"));
            }

            if (m.EmailFroms().Count(ef => ef.Value == m.FromAddress) == 0)
            {
                return(Json(new { error = "No email address to send from." }));
            }

            m.FromName = m.EmailFroms().First(ef => ef.Value == m.FromAddress).Text;
            var from = Util.FirstAddress(m.FromAddress, m.FromName);
            var p    = DbUtil.Db.LoadPersonById(Util.UserPeopleId.Value);

            try
            {
                ValidateEmailReplacementCodes(DbUtil.Db, m.Body, from);

                DbUtil.Db.CopySession();
                DbUtil.Db.Email(from, p, null, m.Subject, m.Body, false);
            }
            catch (Exception ex)
            {
                return(Json(new { error = ex.Message }));
            }
            return(Content("Test email sent."));
        }
Ejemplo n.º 2
0
        public ActionResult TestEmail(MassEmailer m)
        {
            if (Util.SessionTimedOut())
            {
                Session["massemailer"] = m;
                return(Content("timeout"));
            }
            if (m.EmailFroms().Count(ef => ef.Value == m.FromAddress) == 0)
            {
                return(Content("No email address to send from"));
            }
            m.FromName = m.EmailFroms().First(ef => ef.Value == m.FromAddress).Text;
            var From = Util.FirstAddress(m.FromAddress, m.FromName);
            var p    = DbUtil.Db.LoadPersonById(Util.UserPeopleId.Value);

            try
            {
                DbUtil.Db.CopySession();
                DbUtil.Db.Email(From, p, null, m.Subject, m.Body, false);
            }
            catch (Exception ex)
            {
                return(Content("<h2>Error Email Sent</h2>" + ex.Message));
            }
            return(Content("<h2>Test Email Sent</h2>"));
        }
Ejemplo n.º 3
0
        private static void GetRecipientsFromOrg(MassEmailer me, int orgId, bool?onlyProspects, bool?membersAndProspects)
        {
            var members   = DbUtil.Db.OrgPeopleCurrent(orgId).Select(x => DbUtil.Db.LoadPersonById(x.PeopleId));
            var prospects = DbUtil.Db.OrgPeopleProspects(orgId, false).Select(x => DbUtil.Db.LoadPersonById(x.PeopleId));

            me.Recipients   = new List <string>();
            me.RecipientIds = new List <int>();

            var recipients = new List <Person>();

            if (onlyProspects.GetValueOrDefault())
            {
                recipients = prospects.ToList();
            }
            else if (membersAndProspects.GetValueOrDefault())
            {
                recipients = members.Union(prospects).ToList();
            }
            else
            {
                recipients = members.ToList();
            }

            foreach (var r in recipients)
            {
                me.Recipients.Add(r.ToString());
                me.RecipientIds.Add(r.PeopleId);
            }
        }
Ejemplo n.º 4
0
        public ActionResult SaveDraft(MassEmailer m, int saveid, string name, int roleid)
        {
            var id = SaveDraft(saveid, name, roleid, m.Subject, m.Body, m.UnlayerDesign, m.UseUnlayer);

            ViewBag.parents = m.wantParents;
            ViewBag.templateID = id;

            return View("Compose", m);
        }
Ejemplo n.º 5
0
        public ActionResult SaveDraft(MassEmailer m, int saveid, string name, int roleid)
        {
            var id = SaveDraft(saveid, name, roleid, m.Subject, m.Body);

            System.Diagnostics.Debug.Print("Template ID: " + id);

            ViewBag.parents    = m.wantParents;
            ViewBag.templateID = id;

            return(View("Compose", m));
        }
Ejemplo n.º 6
0
        public ActionResult SaveDraft(int tagId, bool wantParents, int saveid, string name, string subject, string body, int roleid)
        {
            Content content = null;

            if (saveid > 0)
            {
                content = DbUtil.ContentFromID(saveid);
            }
            if (content == null)
            {
                content = new Content
                {
                    Name = name.HasValue() ? name
                        : "new draft " + DateTime.Now.FormatDateTm(),
                    TypeID = ContentTypeCode.TypeSavedDraft,
                    RoleID = roleid
                };
                content.OwnerID = Util.UserId;
            }

            content.Title = subject;
            content.Body  = body;

            content.DateCreated = DateTime.Now;

            if (saveid == 0)
            {
                DbUtil.Db.Contents.InsertOnSubmit(content);
            }
            DbUtil.Db.SubmitChanges();

            var m = new MassEmailer
            {
                TagId       = tagId,
                wantParents = wantParents,
                Host        = Util.Host,
                Subject     = subject,
            };

            System.Diagnostics.Debug.Print("Template ID: " + content.Id);

            ViewBag.parents    = wantParents;
            ViewBag.templateID = content.Id;
            return(View("Compose", m));
        }
Ejemplo n.º 7
0
        public ActionResult TestEmail(MassEmailer m)
        {
            m.Body = GetBody(m.Body);
            if (UsesGrammarly(m))
            {
                return Json(new { error = GrammarlyNotAllowed });
            }

            if (TooLarge(m))
            {
                return Json(new { error = TooLargeError });
            }

            if (Util.SessionTimedOut())
            {
                Session["massemailer"] = m;
                return Content("timeout");
            }

            if (m.EmailFroms().Count(ef => ef.Value == m.FromAddress) == 0)
            {
                return Json(new { error = "No email address to send from." });
            }

            m.FromName = m.EmailFroms().First(ef => ef.Value == m.FromAddress).Text;
            var from = Util.FirstAddress(m.FromAddress, m.FromName);
            var p = CurrentDatabase.LoadPersonById(Util.UserPeopleId ?? 0);

            try
            {
                ValidateEmailReplacementCodes(CurrentDatabase, m.Body, from);

                CurrentDatabase.CopySession();
                CurrentDatabase.Email(from, p, null, m.Subject, m.Body, false);
            }
            catch (Exception ex)
            {
                return Json(new { error = ex.Message });
            }
            return Content("Test email sent.");
        }
Ejemplo n.º 8
0
        public ActionResult SaveDraft(int tagId, bool wantParents, int saveid, string name, string subject, string body, int roleid)
        {
            Content content;

            if (saveid > 0)
            {
                content = DbUtil.ContentFromID(saveid);
            }
            else
            {
                content = new Content {
                    Name = name, TypeID = ContentTypeCode.TypeSavedDraft, RoleID = roleid
                }
            };

            content.Title   = subject;
            content.Body    = body;
            content.OwnerID = Util.UserId;

            if (saveid == 0)
            {
                DbUtil.Db.Contents.InsertOnSubmit(content);
            }
            DbUtil.Db.SubmitChanges();

            var m = new MassEmailer
            {
                TagId       = tagId,
                wantParents = wantParents,
                CmsHost     = DbUtil.Db.CmsHost,
                Host        = Util.Host,
                Subject     = subject,
            };

            System.Diagnostics.Debug.Print("Template ID: " + content.Id);

            ViewBag.parents    = wantParents;
            ViewBag.templateID = content.Id;
            return(View("Compose", m));
        }
Ejemplo n.º 9
0
        public ActionResult Index(Guid id, int?templateID, bool?parents, string body, string subj, bool?ishtml, bool?ccparents, bool?nodups, int?orgid)
        {
            if (Util.SessionTimedOut())
            {
                return(Redirect("/Errors/SessionTimeout.htm"));
            }
            if (!body.HasValue())
            {
                body = TempData["body"] as string;
            }

            if (!subj.HasValue() && templateID != 0)
            {
                if (templateID == null)
                {
                    return(View("SelectTemplate", new EmailTemplatesModel
                    {
                        WantParents = parents ?? false,
                        QueryId = id,
                    }));
                }

                DbUtil.LogActivity("Emailing people");

                var m = new MassEmailer(id, parents, ccparents, nodups);

                m.Host = Util.Host;

                if (body.HasValue())
                {
                    templateID = SaveDraft(null, null, 0, null, body);
                }

                ViewBag.templateID = templateID;
                m.OrgId            = orgid;
                return(View("Compose", m));
            }

            // using no templates

            DbUtil.LogActivity("Emailing people");

            var me = new MassEmailer(id, parents, ccparents, nodups);

            me.Host = Util.Host;

            if (body.HasValue())
            {
                me.Body = Server.UrlDecode(body);
            }

            if (subj.HasValue())
            {
                me.Subject = Server.UrlDecode(subj);
            }

            ViewData["oldemailer"] = "/EmailPeople.aspx?id=" + id
                                     + "&subj=" + subj + "&body=" + body + "&ishtml=" + ishtml
                                     + (parents == true ? "&parents=true" : "");

            if (parents == true)
            {
                ViewData["parentsof"] = "with ParentsOf option";
            }

            return(View("Index", me));
        }
Ejemplo n.º 10
0
        public ActionResult QueueEmails(MassEmailer m)
        {
            m.Body = GetBody(m.Body);
            if (!m.Subject.HasValue() || !m.Body.HasValue())
            {
                return(Json(new { id = 0, error = "Both subject and body need some text." }));
            }
            if (!User.IsInRole("Admin") && m.Body.Contains("{createaccount}", ignoreCase: true))
            {
                return(Json(new { id = 0, error = "Only Admin can use {createaccount}." }));
            }

            if (Util.SessionTimedOut())
            {
                Session["massemailer"] = m;
                return(Content("timeout"));
            }

            DbUtil.LogActivity("Emailing people");

            if (m.EmailFroms().Count(ef => ef.Value == m.FromAddress) == 0)
            {
                return(Json(new { id = 0, error = "No email address to send from." }));
            }

            m.FromName = m.EmailFroms().First(ef => ef.Value == m.FromAddress).Text;

            int id;

            try
            {
                var eq = m.CreateQueue();
                if (eq == null)
                {
                    throw new Exception("No Emails to send (tag does not exist)");
                }
                id = eq.Id;

                // If there are additional recipients, add them to the queue
                if (m.AdditionalRecipients != null)
                {
                    foreach (var pid in m.AdditionalRecipients)
                    {
                        // Protect against duplicate PeopleIDs ending up in the queue
                        var q3 = from eqt in DbUtil.Db.EmailQueueTos
                                 where eqt.EmailQueue == eq
                                 where eqt.PeopleId == pid
                                 select eqt;
                        if (q3.Any())
                        {
                            continue;
                        }
                        eq.EmailQueueTos.Add(new EmailQueueTo
                        {
                            PeopleId = pid,
                            OrgId    = eq.SendFromOrgId.HasValue ? eq.SendFromOrgId : null,
                            Guid     = Guid.NewGuid(),
                        });
                    }
                    DbUtil.Db.SubmitChanges();
                }

                if (eq.SendWhen.HasValue)
                {
                    return(Json(new { id = 0, content = "Emails queued to be sent." }));
                }
            }
            catch (Exception ex)
            {
                ErrorSignal.FromCurrentContext().Raise(ex);
                return(Json(new { id = 0, error = ex.Message }));
            }

            var host = Util.Host;
            // save these from HttpContext to set again inside thread local storage
            var userEmail         = Util.UserEmail;
            var isInRoleEmailTest = User.IsInRole("EmailTest");

            try
            {
                ValidateEmailReplacementCodes(DbUtil.Db, m.Body, new MailAddress(m.FromAddress));
            }
            catch (Exception ex)
            {
                return(Json(new { error = ex.Message }));
            }

            System.Threading.Tasks.Task.Factory.StartNew(() =>
            {
                Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;
                try
                {
                    var db  = DbUtil.Create(host);
                    var cul = db.Setting("Culture", "en-US");
                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(cul);
                    Thread.CurrentThread.CurrentCulture   = CultureInfo.CreateSpecificCulture(cul);
                    // set these again inside thread local storage
                    Util.UserEmail         = userEmail;
                    Util.IsInRoleEmailTest = isInRoleEmailTest;
                    db.SendPeopleEmail(id);
                }
                catch (Exception ex)
                {
                    var ex2      = new Exception("Emailing error for queueid " + id, ex);
                    var errorLog = ErrorLog.GetDefault(null);
                    errorLog.Log(new Error(ex2));

                    var db       = DbUtil.Create(host);
                    var equeue   = db.EmailQueues.Single(ee => ee.Id == id);
                    equeue.Error = ex.Message.Truncate(200);
                    db.SubmitChanges();
                }
            });
            return(Json(new { id = id }));
        }
Ejemplo n.º 11
0
        public ActionResult QueueEmails(MassEmailer m)
        {
            if (!m.Subject.HasValue() || !m.Body.HasValue())
            {
                return(Json(new { id = 0, content = "<h2>Both Subject and Body need some text</h2>" }));
            }
            if (!User.IsInRole("Admin") && m.Body.Contains("{createaccount}"))
            {
                return(Json(new { id = 0, content = "<h2>Only Admin can use {createaccount}</h2>" }));
            }

            if (Util.SessionTimedOut())
            {
                Session["massemailer"] = m;
                return(Content("timeout"));
            }

            DbUtil.LogActivity("Emailing people");

            if (m.EmailFroms().Count(ef => ef.Value == m.FromAddress) == 0)
            {
                return(Json(new { id = 0, content = "No email address to send from" }));
            }
            m.FromName = m.EmailFroms().First(ef => ef.Value == m.FromAddress).Text;

            int id;

            try
            {
                id = m.CreateQueue();
                if (id == 0)
                {
                    throw new Exception("No Emails to send (tag does not exist)");
                }
                if (m.Schedule.HasValue)
                {
                    return(Json(new { id = 0, content = "<h2>Emails Queued</h2>" }));
                }
            }
            catch (Exception ex)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
                return(Json(new { id = 0, content = "<h2>Error</h2><p>{0}</p>".Fmt(ex.Message) }));
            }

            string host = Util.Host;
            // save these from HttpContext to set again inside thread local storage
            var useremail         = Util.UserEmail;
            var isinroleemailtest = User.IsInRole("EmailTest");

            System.Threading.Tasks.Task.Factory.StartNew(() =>
            {
                Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;
                try
                {
                    var Db  = new CMSDataContext(Util.GetConnectionString(host));
                    Db.Host = host;
                    var cul = Db.Setting("Culture", "en-US");
                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(cul);
                    Thread.CurrentThread.CurrentCulture   = CultureInfo.CreateSpecificCulture(cul);
                    // set these again inside thread local storage
                    Util.UserEmail         = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    Db.SendPeopleEmail(id);
                }
                catch (Exception ex)
                {
                    var ex2           = new Exception("Emailing error for queueid " + id, ex);
                    ErrorLog errorLog = ErrorLog.GetDefault(null);
                    errorLog.Log(new Error(ex2));

                    var Db       = new CMSDataContext(Util.GetConnectionString(host));
                    Db.Host      = host;
                    var equeue   = Db.EmailQueues.Single(ee => ee.Id == id);
                    equeue.Error = ex.Message.Truncate(200);
                    Db.SubmitChanges();
                }
            });
            string keepdraft = Request["keepdraft"];
            int    saveid    = Request["saveid"].ToInt();

            System.Diagnostics.Debug.Print("Keep: " + keepdraft + " - Save ID: " + saveid);
            if (keepdraft != "on" && saveid > 0)
            {
                DbUtil.ContentDeleteFromID(saveid);
            }
            return(Json(new { id = id }));
        }
Ejemplo n.º 12
0
 private static bool UsesGrammarly(MassEmailer m)
 {
     return(m.Body.Contains("btn_grammarly"));
 }
Ejemplo n.º 13
0
 private static bool TooLarge(MassEmailer m)
 {
     return((m.Body.Contains("data:image") && m.Body.Length > 100000) || m.Body.Length > 400000);
 }
Ejemplo n.º 14
0
        public ActionResult QueueEmails(MassEmailer m)
        {
            m.Body = GetBody(m.Body);
            if (UsesGrammarly(m))
            {
                return(Json(new { error = GrammarlyNotAllowed }));
            }
            if (TooLarge(m))
            {
                return(Json(new { error = TooLargeError }));
            }
            if (!m.Subject.HasValue() || !m.Body.HasValue())
            {
                return(Json(new { id = 0, error = "Both subject and body need some text." }));
            }
            if (!User.IsInRole("Admin") && m.Body.Contains("{createaccount}", ignoreCase: true))
            {
                return(Json(new { id = 0, error = "Only Admin can use {createaccount}." }));
            }

            if (Util.SessionTimedOut())
            {
                Session["massemailer"] = m;
                return(Content("timeout"));
            }

            DbUtil.LogActivity("Emailing people");

            if (m.EmailFroms().Count(ef => ef.Value == m.FromAddress) == 0)
            {
                return(Json(new { id = 0, error = "No email address to send from." }));
            }

            m.FromName = m.EmailFroms().First(ef => ef.Value == m.FromAddress).Text;

            int id;

            try
            {
                var eq = m.CreateQueue();
                if (eq == null)
                {
                    throw new Exception("No Emails to send (tag does not exist)");
                }
                id = eq.Id;

                // If there are additional recipients, add them to the queue
                if (m.AdditionalRecipients != null)
                {
                    foreach (var pid in m.AdditionalRecipients)
                    {
                        // Protect against duplicate PeopleIDs ending up in the queue
                        var q3 = from eqt in DbUtil.Db.EmailQueueTos
                                 where eqt.EmailQueue == eq
                                 where eqt.PeopleId == pid
                                 select eqt;
                        if (q3.Any())
                        {
                            continue;
                        }
                        eq.EmailQueueTos.Add(new EmailQueueTo
                        {
                            PeopleId = pid,
                            OrgId    = eq.SendFromOrgId,
                            Guid     = Guid.NewGuid(),
                        });
                    }
                    DbUtil.Db.SubmitChanges();
                }

                if (m.RecipientIds != null)
                {
                    foreach (var pid in m.RecipientIds)
                    {
                        // Protect against duplicate PeopleIDs ending up in the queue
                        var q3 = from eqt in DbUtil.Db.EmailQueueTos
                                 where eqt.EmailQueue == eq
                                 where eqt.PeopleId == pid
                                 select eqt;
                        if (q3.Any())
                        {
                            continue;
                        }
                        eq.EmailQueueTos.Add(new EmailQueueTo
                        {
                            PeopleId = pid,
                            OrgId    = eq.SendFromOrgId,
                            Guid     = Guid.NewGuid(),
                        });
                    }
                    DbUtil.Db.SubmitChanges();
                }

                if (eq.SendWhen.HasValue)
                {
                    return(Json(new { id = 0, content = "Emails queued to be sent." }));
                }
            }
            catch (Exception ex)
            {
                ErrorSignal.FromCurrentContext().Raise(ex);
                return(Json(new { id = 0, error = ex.Message }));
            }

            var host      = Util.Host;
            var currorgid = DbUtil.Db.CurrentSessionOrgId;
            // save these from HttpContext to set again inside thread local storage
            var userEmail         = Util.UserEmail;
            var isInRoleEmailTest = User.IsInRole("EmailTest");
            var isMyDataUser      = User.IsInRole("Access") == false;

            try
            {
                ValidateEmailReplacementCodes(DbUtil.Db, m.Body, new MailAddress(m.FromAddress));
            }
            catch (Exception ex)
            {
                return(Json(new { error = ex.Message }));
            }

            var onlyProspects = m.OnlyProspects;

            HostingEnvironment.QueueBackgroundWorkItem(ct =>
            {
                try
                {
                    var db  = DbUtil.Create(host);
                    var cul = db.Setting("Culture", "en-US");
                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(cul);
                    Thread.CurrentThread.CurrentCulture   = CultureInfo.CreateSpecificCulture(cul);
                    // set these again inside thread local storage
                    db.SetCurrentOrgId(currorgid);
                    Util.UserEmail         = userEmail;
                    Util.IsInRoleEmailTest = isInRoleEmailTest;
                    Util.IsMyDataUser      = isMyDataUser;
                    db.SendPeopleEmail(id, onlyProspects);
                }
                catch (Exception ex)
                {
                    var ex2 = new Exception($"Emailing error for queueid {id} on {host}\n{ex.Message}", ex);
                    var cb  = new SqlConnectionStringBuilder(Util.ConnectionString)
                    {
                        InitialCatalog = "ELMAH"
                    };
                    var errorLog = new SqlErrorLog(cb.ConnectionString)
                    {
                        ApplicationName = "BVCMS"
                    };
                    errorLog.Log(new Error(ex2));

                    var db       = DbUtil.Create(host);
                    var equeue   = db.EmailQueues.Single(ee => ee.Id == id);
                    equeue.Error = ex.Message.Truncate(200);
                    db.SubmitChanges();
                }
            });
            return(Json(new { id = id }));
        }
Ejemplo n.º 15
0
        public ActionResult Index(Guid id, int?templateID, bool?parents, string body, string subj, bool?ishtml, bool?ccparents, bool?nodups, int?orgid, int?personid, bool?recover, bool?onlyProspects, bool?membersAndProspects)
        {
            if (Util.SessionTimedOut())
            {
                return(Redirect("/Errors/SessionTimeout.htm"));
            }
            if (!body.HasValue())
            {
                body = TempData["body"] as string;
            }

            if (!subj.HasValue() && templateID != 0)
            {
                if (templateID == null)
                {
                    return(View("SelectTemplate", new EmailTemplatesModel
                    {
                        WantParents = parents ?? false,
                        QueryId = id,
                    }));
                }

                DbUtil.LogActivity("Emailing people");

                var m = new MassEmailer(id, parents, ccparents, nodups);

                m.Host = Util.Host;

                if (body.HasValue())
                {
                    templateID = SaveDraft(null, null, 0, null, body);
                }

                ViewBag.templateID = templateID;
                m.OrgId            = orgid;
                m.guid             = id;
                if (recover == true)
                {
                    m.recovery = true;
                }
                return(View("Compose", m));
            }

            // using no templates

            DbUtil.LogActivity("Emailing people");

            var me = new MassEmailer(id, parents, ccparents, nodups);

            me.Host          = Util.Host;
            me.OnlyProspects = onlyProspects.GetValueOrDefault();

            // Unless UX-AllowMyDataUserEmails is true, CmsController.OnActionExecuting() will filter them
            if (!User.IsInRole("Access"))
            {
                if (templateID != 0 || (!personid.HasValue && !orgid.HasValue))
                {
                    return(Redirect($"/Person2/{Util.UserPeopleId}"));
                }
            }

            if (personid.HasValue)
            {
                me.AdditionalRecipients = new List <int> {
                    personid.Value
                };

                var person = DbUtil.Db.LoadPersonById(personid.Value);
                ViewBag.ToName = person?.Name;
            }
            else if (orgid.HasValue)
            {
                var org = DbUtil.Db.LoadOrganizationById(orgid.Value);
                GetRecipientsFromOrg(me, orgid.Value, onlyProspects, membersAndProspects);
                me.Count       = me.Recipients.Count();
                ViewBag.ToName = org?.OrganizationName;
            }

            if (body.HasValue())
            {
                me.Body = Server.UrlDecode(body);
            }

            if (subj.HasValue())
            {
                me.Subject = Server.UrlDecode(subj);
            }

            ViewData["oldemailer"] = "/EmailPeople.aspx?id=" + id
                                     + "&subj=" + subj + "&body=" + body + "&ishtml=" + ishtml
                                     + (parents == true ? "&parents=true" : "");

            if (parents == true)
            {
                ViewData["parentsof"] = "with ParentsOf option";
            }

            return(View("Index", me));
        }
Ejemplo n.º 16
0
        public void SendEmails()
        {
            var tag = Db.FetchOrCreateTag(Util.SessionId, Util.UserPeopleId, Db.NextTagId);

            Db.ExecuteCommand("delete TagPerson where Id = {0}", tag.Id);
            Db.TagAll(pids, tag);
            var dt = new DateTime(ticks);

            foreach (var id in pids)
            {
                var vr = new SubRequest
                {
                    AttendId     = attend.AttendId,
                    RequestorId  = person.PeopleId,
                    Requested    = dt,
                    SubstituteId = id,
                };
                attend.SubRequests.Add(vr);
            }

            var qb = Db.ScratchPadCondition();

            qb.Reset(Db);
            qb.AddNewClause(QueryType.HasMyTag, CompareType.Equal, "{0},temp".Fmt(tag.Id));
            attend.Commitment = CmsData.Codes.AttendCommitmentCode.FindSub;
            qb.Save(DbUtil.Db);

            var rurl       = DbUtil.Db.ServerLink("/OnlineReg/VolSubReport/{0}/{1}/{2}".Fmt(attend.AttendId, person.PeopleId, dt.Ticks));
            var reportlink = @"<a href=""{0}"">Substitute Status Report</a>".Fmt(rurl);
            var list       = Db.PeopleFromPidString(org.NotifyIds).ToList();

            //list.Insert(0, person);
            Db.Email(person.FromEmail, list,
                     "Volunteer Substitute Commitment for " + org.OrganizationName,
                     @"
<p>{0} has requested a substitute on {1:MMM d} at {1:h:mm tt}.</p>
<blockquote>
{2}
</blockquote>".Fmt(person.Name, attend.MeetingDate, reportlink));

            // Email subs
            var m = new MassEmailer(qb.Id);

            m.Subject = subject;
            m.Body    = message;

            DbUtil.LogActivity("Emailing Vol Subs");
            m.FromName    = person.Name;
            m.FromAddress = person.FromEmail;

            var    eqid = m.CreateQueue(transactional: true).Id;
            string host = Util.Host;
            // save these from HttpContext to set again inside thread local storage
            var useremail         = Util.UserEmail;
            var isinroleemailtest = HttpContext.Current.User.IsInRole("EmailTest");

            TaskAlias.Factory.StartNew(() =>
            {
                Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;
                try
                {
                    var db  = new CMSDataContext(Util.GetConnectionString(host));
                    db.Host = host;
                    // set these again inside thread local storage
                    Util.UserEmail         = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    db.SendPeopleEmail(eqid);
                }
                catch (Exception ex)
                {
                    var ex2           = new Exception("Emailing error for queueid " + eqid, ex);
                    ErrorLog errorLog = ErrorLog.GetDefault(null);
                    errorLog.Log(new Error(ex2));

                    var db  = new CMSDataContext(Util.GetConnectionString(host));
                    db.Host = host;
                    // set these again inside thread local storage
                    Util.UserEmail         = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    var equeue             = db.EmailQueues.Single(ee => ee.Id == eqid);
                    equeue.Error           = ex.Message.Truncate(200);
                    db.SubmitChanges();
                }
            });
        }
Ejemplo n.º 17
0
        public void SendEmails()
        {
            var tag = CurrentDatabase.FetchOrCreateTag(Util.SessionId, Util.UserPeopleId, CurrentDatabase.NextTagId);

            CurrentDatabase.ExecuteCommand("delete TagPerson where Id = {0}", tag.Id);
            CurrentDatabase.TagAll(pids, tag);
            var dt = new DateTime(ticks);

            foreach (var id in pids)
            {
                var vr = new SubRequest
                {
                    AttendId     = attend.AttendId,
                    RequestorId  = person.PeopleId,
                    Requested    = dt,
                    SubstituteId = id,
                };
                attend.SubRequests.Add(vr);
            }
            CurrentDatabase.SubmitChanges();

            var qb = CurrentDatabase.ScratchPadCondition();

            qb.Reset();
            qb.AddNewClause(QueryType.HasMyTag, CompareType.Equal, $"{tag.Id},temp");
            attend.Commitment = CmsData.Codes.AttendCommitmentCode.FindSub;
            qb.Save(CurrentDatabase);

            var rurl       = CurrentDatabase.ServerLink($"/OnlineReg/VolSubReport/{attend.AttendId}/{person.PeopleId}/{dt.Ticks}");
            var reportlink = $@"<a href=""{rurl}"">Substitute Status Report</a>";
            var list       = CurrentDatabase.PeopleFromPidString(org.NotifyIds).ToList();

            //list.Insert(0, person);
            CurrentDatabase.Email(person.FromEmail, list,
                                  "Volunteer Substitute Commitment for " + org.OrganizationName,
                                  $@"
<p>{person.Name} has requested a substitute on {attend.MeetingDate:MMM d} at {attend.MeetingDate:h:mm tt}.</p>
<blockquote>
{reportlink}
</blockquote>");

            // Email subs
            var m = new MassEmailer(qb.Id);

            m.Subject = subject;
            m.Body    = message;

            m.FromName    = person.Name;
            m.FromAddress = person.FromEmail;

            var    eqid = m.CreateQueue(transactional: true).Id;
            string host = CurrentDatabase.Host;
            // save these from HttpContext to set again inside thread local storage
            var useremail         = Util.UserEmail;
            var isinroleemailtest = HttpContextFactory.Current.User.IsInRole("EmailTest");

            Log("Send Emails");

            HostingEnvironment.QueueBackgroundWorkItem(ct =>
            {
                try
                {
                    var db = CMSDataContext.Create(host);
                    // set these again inside thread local storage
                    Util.UserEmail         = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    db.SendPeopleEmail(eqid);
                }
                catch (Exception ex)
                {
                    Log("Email Error");
                    var ex2           = new Exception("Emailing error for queueid " + eqid, ex);
                    ErrorLog errorLog = ErrorLog.GetDefault(null);
                    errorLog.Log(new Error(ex2));

                    var db = CMSDataContext.Create(host);
                    // set these again inside thread local storage
                    Util.UserEmail         = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    var equeue             = db.EmailQueues.Single(ee => ee.Id == eqid);
                    equeue.Error           = ex.Message.Truncate(200);
                    db.SubmitChanges();
                }
            });
        }
Ejemplo n.º 18
0
        public void SendEmails(int?additional)
        {
            var tag = Db.FetchOrCreateTag(Util.SessionId, Util.UserPeopleId, Db.NextTagId);

            Db.ExecuteCommand("delete TagPerson where Id = {0}", tag.Id);
            Db.TagAll(pids, tag);
            var dt = new DateTime(ticks);

            foreach (var id in pids)
            {
                var vr = new VolRequest
                {
                    MeetingId   = meeting.MeetingId,
                    RequestorId = person.PeopleId,
                    Requested   = dt,
                    VolunteerId = id
                };
                meeting.VolRequests.Add(vr);
            }

            var qb = Db.ScratchPadCondition();

            qb.Reset();
            qb.AddNewClause(QueryType.HasMyTag, CompareType.Equal, $"{tag.Id},temp");
            meeting.AddEditExtra(Db, "TotalVolunteersNeeded", ((additional ?? 0) + limit).ToString());
            qb.Save(DbUtil.Db);

            var rurl       = DbUtil.Db.ServerLink($"/OnlineReg/VolRequestReport/{meeting.MeetingId}/{person.PeopleId}/{dt.Ticks}");
            var reportlink = $@"<a href=""{rurl}"">Volunteer Request Status Report</a>";
            var list       = Db.PeopleFromPidString(org.NotifyIds).ToList();

            //list.Insert(0, person);
            Db.Email(person.FromEmail, list,
                     "Volunteer Commitment for " + org.OrganizationName,
                     $@"
<p>{person.Name} has requested volunteers on {meeting.MeetingDate:MMM d} for {meeting.MeetingDate:h:mm tt}.</p>
<blockquote>
{reportlink}
</blockquote>");

            // Email subs
            var m = new MassEmailer(qb.Id);

            m.Subject = subject;
            m.Body    = message;

            DbUtil.LogActivity("Emailing Vol Subs");
            m.FromName    = person.Name;
            m.FromAddress = person.FromEmail;

            var eqid = m.CreateQueue(true).Id;
            var host = Util.Host;
            // save these from HttpContext to set again inside thread local storage
            var useremail         = Util.UserEmail;
            var isinroleemailtest = HttpContext.Current.User.IsInRole("EmailTest");

            TaskAlias.Factory.StartNew(() =>
            {
                Thread.CurrentThread.Priority = ThreadPriority.BelowNormal;
                try
                {
                    var db = DbUtil.Create(host);
                    // set these again inside thread local storage
                    Util.UserEmail         = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    db.SendPeopleEmail(eqid);
                }
                catch (Exception ex)
                {
                    var ex2      = new Exception("Emailing error for queueid " + eqid, ex);
                    var errorLog = ErrorLog.GetDefault(null);
                    errorLog.Log(new Error(ex2));

                    var db = DbUtil.Create(host);
                    // set these again inside thread local storage
                    Util.UserEmail         = useremail;
                    Util.IsInRoleEmailTest = isinroleemailtest;
                    var equeue             = db.EmailQueues.Single(ee => ee.Id == eqid);
                    equeue.Error           = ex.Message.Truncate(200);
                    db.SubmitChanges();
                }
            });
        }
Ejemplo n.º 19
0
        public ActionResult Index(int?id, int?templateID, bool?parents, string body, string subj, bool?ishtml)
        {
            if (!id.HasValue)
            {
                return(Content("no id"));
            }
            if (Util.SessionTimedOut())
            {
                return(Redirect("/Errors/SessionTimeout.htm"));
            }
            if (!body.HasValue())
            {
                body = TempData["body"] as string;
            }

            if (!subj.HasValue() && templateID != 0 && DbUtil.Db.Setting("UseEmailTemplates", "false") == "true")
            {
                if (templateID == null)
                {
                    return(View("SelectTemplate", new EmailTemplatesModel()
                    {
                        wantparents = parents ?? false, queryid = id.Value
                    }));
                }
                else
                {
                    DbUtil.LogActivity("Emailing people");

                    var m = new MassEmailer(id.Value, parents);
                    m.CmsHost = DbUtil.Db.CmsHost;
                    m.Host    = Util.Host;

                    ViewBag.templateID = templateID;
                    return(View("Compose", m));
                }
            }

            // using no templates

            DbUtil.LogActivity("Emailing people");

            var me = new MassEmailer(id.Value, parents);

            me.CmsHost = DbUtil.Db.CmsHost;
            me.Host    = Util.Host;

            if (body.HasValue())
            {
                me.Body = Server.UrlDecode(body);
            }

            if (subj.HasValue())
            {
                me.Subject = Server.UrlDecode(subj);
            }

            ViewData["oldemailer"] = "/EmailPeople.aspx?id=" + id
                                     + "&subj=" + subj + "&body=" + body + "&ishtml=" + ishtml
                                     + (parents == true ? "&parents=true" : "");

            if (parents == true)
            {
                ViewData["parentsof"] = "with ParentsOf option";
            }

            return(View(me));
        }