Beispiel #1
0
        public void Email(MailAddress fromAddress, Person p, List <MailAddress> addmail, string subject, string body, bool redacted = false)
        {
            var emailqueue = new EmailQueue
            {
                Queued        = Util.Now,
                FromAddr      = fromAddress.Address,
                FromName      = fromAddress.DisplayName,
                Subject       = subject,
                Body          = body,
                QueuedBy      = Util.UserPeopleId,
                Redacted      = redacted,
                Transactional = true
            };

            EmailQueues.InsertOnSubmit(emailqueue);
            string addmailstr = null;

            if (addmail != null)
            {
                addmailstr = addmail.EmailAddressListToString();
            }
            emailqueue.EmailQueueTos.Add(new EmailQueueTo
            {
                PeopleId = p.PeopleId,
                OrgId    = Util2.CurrentOrgId,
                AddEmail = addmailstr,
                Guid     = Guid.NewGuid(),
            });
            SubmitChanges();
            SendPersonEmail(emailqueue.Id, p.PeopleId);
        }
Beispiel #2
0
        public void EmailFinanceInformation(MailAddress fromaddress, Person p, List <MailAddress> list, string subject, string body)
        {
            var emailqueue = new EmailQueue
            {
                Queued        = DateTime.Now,
                FromAddr      = fromaddress.Address,
                FromName      = fromaddress.DisplayName,
                Subject       = subject,
                Body          = body,
                QueuedBy      = Util.UserPeopleId,
                Transactional = true,
                FinanceOnly   = true
            };

            EmailQueues.InsertOnSubmit(emailqueue);
            string addmailstr = null;

            if (list != null)
            {
                addmailstr = list.EmailAddressListToString();
            }
            emailqueue.EmailQueueTos.Add(new EmailQueueTo
            {
                PeopleId = p.PeopleId,
                OrgId    = CurrentOrgId,
                AddEmail = addmailstr,
                Guid     = Guid.NewGuid(),
            });
            SubmitChanges();
            SendPersonEmail(emailqueue.Id, p.PeopleId);
        }
Beispiel #3
0
        public EmailQueue CreateQueueForOrg(MailAddress from, string subject, string body, DateTime?schedule, int orgid, bool publicViewable, string cclist = null)
        {
            var emailqueue = new EmailQueue
            {
                Queued        = Util.Now,
                FromAddr      = from.Address,
                FromName      = from.DisplayName,
                Subject       = subject,
                Body          = body,
                SendWhen      = schedule,
                QueuedBy      = Util.UserPeopleId,
                Transactional = false,
                PublicX       = publicViewable,
                SendFromOrgId = orgid,
                CClist        = cclist
            };

            EmailQueues.InsertOnSubmit(emailqueue);
            SubmitChanges();

            if (body.Contains("http://publiclink", ignoreCase: true))
            {
                var link = ServerLink("/EmailView/" + emailqueue.Id);
                var re   = new Regex("http://publiclink", RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase);
                emailqueue.Body = re.Replace(body, link);
            }
            SubmitChanges();
            return(emailqueue);
        }
Beispiel #4
0
        public EmailQueue CreateQueue(int?queuedBy, MailAddress from, string subject, string body, DateTime?schedule, int tagId, bool publicViewable)
        {
            var tag = TagById(tagId);

            if (tag == null)
            {
                return(null);
            }

            var emailqueue = new EmailQueue
            {
                Queued        = DateTime.Now,
                FromAddr      = from.Address,
                FromName      = from.DisplayName,
                Subject       = subject,
                Body          = body,
                SendWhen      = schedule,
                QueuedBy      = queuedBy,
                Transactional = false,
                PublicX       = publicViewable,
            };

            EmailQueues.InsertOnSubmit(emailqueue);

            SubmitChanges();
            if (body.Contains("http://publiclink", ignoreCase: true))
            {
                var link = Util.URLCombine(CmsHost, "/Manage/Emails/View/" + emailqueue.Id);
                var re   = new Regex("http://publiclink", RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase);
                emailqueue.Body = re.Replace(body, link);
            }

            var q = tag.People(this);

            var q2 = from p in q.Distinct()
                     where p.EmailAddress != null
                     where p.EmailAddress != ""
                     where (p.SendEmailAddress1 ?? true) || (p.SendEmailAddress2 ?? false)
                     where p.EmailOptOuts.All(oo => oo.FromEmail != emailqueue.FromAddr)
                     orderby p.PeopleId
                     select p.PeopleId;

            var i = 0;

            foreach (var pid in q2)
            {
                i++;
                emailqueue.EmailQueueTos.Add(new EmailQueueTo
                {
                    PeopleId = pid,
                    OrgId    = CurrentOrgId,
                    Guid     = Guid.NewGuid()
                });
            }
            SubmitChanges();
            return(emailqueue);
        }
Beispiel #5
0
        public void SendPersonEmail(int id, int pid)
        {
            var sysFromEmail = Util.SysFromEmail;
            var emailqueue   = EmailQueues.Single(eq => eq.Id == id);
            var emailqueueto = EmailQueueTos.Single(eq => eq.Id == id && eq.PeopleId == pid);
            var fromname     = emailqueueto.EmailQueue.FromName;

            fromname = !fromname.HasValue() ? emailqueue.FromAddr : emailqueue.FromName.Replace("\"", "");
            var from = Util.FirstAddress(emailqueue.FromAddr, fromname);

            try
            {
                var p    = LoadPersonById(emailqueueto.PeopleId);
                var body = DoClickTracking(emailqueue);
                var m    = new EmailReplacements(this, body, from);
                var text = m.DoReplacements(p, emailqueueto);
                var aa   = m.ListAddresses;

                if (Setting("sendemail", "true") != "false")
                {
                    if (aa.Count > 0)
                    {
                        Util.SendMsg(sysFromEmail, CmsHost, from, emailqueue.Subject, text, aa, emailqueue.Id, pid);
                    }
                    else
                    {
                        Util.SendMsg(sysFromEmail, CmsHost, from,
                                     "(no email address) " + emailqueue.Subject,
                                     "<p style='color:red'>You are receiving this because there is no email address for {0}({1}). You should probably contact them since they were probably expecting this information.</p>\n{2}".Fmt(p.Name, p.PeopleId, text),
                                     Util.ToMailAddressList(from),
                                     emailqueue.Id, pid);
                    }
                    emailqueueto.Sent = DateTime.Now;
                    emailqueue.Sent   = DateTime.Now;
                    if (emailqueue.Redacted ?? false)
                    {
                        emailqueue.Body = "redacted";
                    }
                    SubmitChanges();
                }
            }
            catch (Exception ex)
            {
                Util.SendMsg(sysFromEmail, CmsHost, from,
                             "sent emails - error", ex.ToString(),
                             Util.ToMailAddressList(from),
                             emailqueue.Id, null);
                throw;
            }
        }
Beispiel #6
0
        public EmailQueue CreateQueueForSupporters(int?queuedBy, MailAddress from, string subject, string body, DateTime?schedule, List <GoerSupporter> list, bool publicViewable)
        {
            var emailqueue = new EmailQueue
            {
                Queued        = Util.Now,
                FromAddr      = from.Address,
                FromName      = from.DisplayName,
                Subject       = subject,
                Body          = body,
                SendWhen      = schedule,
                QueuedBy      = queuedBy,
                Transactional = false,
                PublicX       = publicViewable,
            };

            EmailQueues.InsertOnSubmit(emailqueue);
            SubmitChanges();

            var q2 = from g in list
                     where g.SupporterId != null
                     where g.Supporter.EmailAddress != null
                     where g.Supporter.EmailAddress != ""
                     where (g.Supporter.SendEmailAddress1 ?? true) || (g.Supporter.SendEmailAddress2 ?? false)
                     where g.Supporter.EmailOptOuts.All(oo => oo.FromEmail != emailqueue.FromAddr)
                     orderby g.SupporterId
                     select g;

            foreach (var g in q2)
            {
                emailqueue.EmailQueueTos.Add(new EmailQueueTo
                {
                    PeopleId      = g.SupporterId ?? 0,
                    OrgId         = Util2.CurrentOrgId,
                    Guid          = Guid.NewGuid(),
                    GoerSupportId = g.Id,
                });
            }
            SubmitChanges();
            return(emailqueue);
        }
Beispiel #7
0
        public void SendPeopleEmailWithPython(int queueid, IEnumerable <dynamic> recipientData, DynamicData pythonData)
        {
            var emailqueue = EmailQueues.Single(ee => ee.Id == queueid);
            var from       = Util.FirstAddress(emailqueue.FromAddr, emailqueue.FromName);

            if (!emailqueue.Subject.HasValue() || !emailqueue.Body.HasValue())
            {
                SendEmail(from,
                          $"sent emails - error(emailid={emailqueue.Id})", "no subject or body, no emails sent",
                          Util.ToMailAddressList(from),
                          emailqueue.Id);
                return;
            }
            var dict = recipientData.ToDictionary(vv => (int)vv.PeopleId, vv => vv);

            var body = DoClickTracking(emailqueue);
            var m    = new EmailReplacements(this, body, from, queueid, pythondata: pythonData);

            emailqueue.Started = Util.Now;
            SubmitChanges();

            var cc = Util.ToMailAddressList(emailqueue.CClist);

            var q = from to in EmailQueueTos
                    where to.Id == emailqueue.Id
                    where to.Sent == null
                    orderby to.PeopleId
                    select to;

            foreach (var to in q)
            {
                try
                {
                    if (m.OptOuts != null && m.OptOuts.Any(vv => vv.PeopleId == to.PeopleId && vv.OptOutX == true))
                    {
                        continue;
                    }
                    if (!dict.ContainsKey(to.PeopleId))
                    {
                        continue;
                    }

                    var text = m.DoReplacements(to.PeopleId, to);

                    text = RenderTemplate(text, dict[to.PeopleId]);
                    if (text.Contains("<!--SKIP-->"))
                    {
                        continue;
                    }
                    var re   = new Regex("<!--SUBJECT:(?<subj>.*)-->");
                    var subj = re.Match(text).Groups["subj"].Value;

                    var aa = m.ListAddresses;

                    if (Setting("sendemail", "true") != "false")
                    {
                        SendEmail(from, Util.PickFirst(subj, emailqueue.Subject), text, aa, to, cc);
                        to.Sent = Util.Now;
                        SubmitChanges();
                    }
                }
                catch (Exception ex)
                {
                    var subject = $"sent emails - error:(emailid={emailqueue.Id}) {CmsHost}";
                    ErrorLog.GetDefault(null).Log(new Error(new Exception(subject, ex)));
                    SendEmail(from, subject, $"{ex.Message}\n{ex.StackTrace}", Util.ToMailAddressList(from), to);
                }
            }

            emailqueue.Sent = Util.Now;
            var nitems = emailqueue.EmailQueueTos.Count();

            if (cc.Count > 0)
            {
                nitems += cc.Count;
            }
            if (nitems > 1)
            {
                NotifySentEmails(from.Address, from.DisplayName,
                                 emailqueue.Subject, nitems, emailqueue.Id);
            }
            SubmitChanges();
        }
Beispiel #8
0
        public void SendPeopleEmail(int queueid, bool onlyProspects = false)
        {
            var emailqueue = EmailQueues.Single(ee => ee.Id == queueid);
            var from       = Util.FirstAddress(emailqueue.FromAddr, emailqueue.FromName);

            if (!emailqueue.Subject.HasValue() || !emailqueue.Body.HasValue())
            {
                SendEmail(from,
                          $"sent emails - error(emailid={emailqueue.Id})", "no subject or body, no emails sent",
                          Util.ToMailAddressList(from),
                          emailqueue.Id);
                return;
            }

            var body = DoClickTracking(emailqueue);
            var m    = new EmailReplacements(this, body, from, queueid);

            emailqueue.Started = Util.Now;
            SubmitChanges();

            var cc = Util.ToMailAddressList(emailqueue.CClist);

            if (emailqueue.SendFromOrgId.HasValue)
            {
                if (!onlyProspects)
                {
                    var q2 = from om in OrganizationMembers
                             where om.OrganizationId == emailqueue.SendFromOrgId
                             where om.MemberTypeId != MemberTypeCode.InActive
                             where om.MemberTypeId != MemberTypeCode.Prospect
                             where (om.Pending ?? false) == false
                             let p = om.Person
                                     where p.EmailAddress != null
                                     where p.EmailAddress != ""
                                     where (p.SendEmailAddress1 ?? true) || (p.SendEmailAddress2 ?? false)
                                     where p.EmailOptOuts.All(oo => oo.FromEmail != emailqueue.FromAddr)
                                     select om.PeopleId;
                    foreach (var pid in q2)
                    {
                        // Protect against duplicate PeopleIDs ending up in the queue
                        if (emailqueue.EmailQueueTos.Any(pp => pp.PeopleId == pid))
                        {
                            continue;
                        }
                        emailqueue.EmailQueueTos.Add(new EmailQueueTo
                        {
                            PeopleId = pid,
                            OrgId    = emailqueue.SendFromOrgId,
                            Guid     = Guid.NewGuid(),
                        });
                    }
                    SubmitChanges();
                }
            }

            var queue = from t in EmailQueueTos
                        where t.Id == emailqueue.Id
                        where t.Sent == null
                        orderby t.PeopleId
                        select t;

            foreach (var queueTo in queue)
            {
                try
                {
                    if (m.OptOuts != null && m.OptOuts.Any(vv => vv.PeopleId == queueTo.PeopleId && vv.OptOutX == true))
                    {
                        continue;
                    }
                    var text = m.DoReplacements(queueTo.PeopleId, queueTo);
                    var aa   = m.ListAddresses;

                    if (Setting("sendemail", true))
                    {
                        SendEmail(from, emailqueue.Subject, text, aa, queueTo, cc);
                        queueTo.Sent = Util.Now;
                        SubmitChanges();
                    }
                }
                catch (Exception ex)
                {
                    var subject = $"sent emails - error:(emailid={emailqueue.Id}) {CmsHost}";
                    ErrorLog.GetDefault(null).Log(new Error(new Exception(subject, ex)));
                    SendEmail(from, subject, $"{ex.Message}\n{ex.StackTrace}", Util.ToMailAddressList(from), queueTo);
                }
            }

            // Handle CC MailAddresses.  These do not get DoReplacement support.
            if (cc.Count > 0)
            {
                foreach (var ma in cc)
                {
                    try
                    {
                        if (Setting("sendemail", "true") != "false")
                        {
                            List <MailAddress> mal = new List <MailAddress> {
                                ma
                            };
                            SendEmail(from, emailqueue.Subject, body, mal, emailqueue.Id, cc: cc);
                        }
                    }
                    catch (Exception ex)
                    {
                        var subject = $"sent emails - error:(emailid={emailqueue.Id}) {CmsHost}";
                        ErrorLog.GetDefault(null).Log(new Error(new Exception(subject, ex)));
                        SendEmail(from, subject, ex.Message, Util.ToMailAddressList(from));
                    }
                }
            }

            emailqueue.Sent = Util.Now;
            if (emailqueue.Redacted ?? false)
            {
                emailqueue.Body = "redacted";
            }
            else if (emailqueue.Transactional == false)
            {
                var nitems = emailqueue.EmailQueueTos.Count();
                if (cc.Count > 0)
                {
                    nitems += cc.Count;
                }
                if (nitems > 1)
                {
                    NotifySentEmails(from.Address, from.DisplayName,
                                     emailqueue.Subject, nitems, emailqueue.Id);
                }
            }
            SubmitChanges();
        }
Beispiel #9
0
        public EmailQueue CreateQueue(int?queuedBy, MailAddress from, string subject, string body, DateTime?schedule, int tagId, bool publicViewable, int?goerSupporterId = null, bool?ccParents = null, string cclist = null)
        {
            var tag = TagById(tagId);

            if (tag == null)
            {
                return(null);
            }

            var emailqueue = new EmailQueue
            {
                Queued        = Util.Now,
                FromAddr      = from.Address,
                FromName      = from.DisplayName,
                Subject       = subject,
                Body          = body,
                SendWhen      = schedule,
                QueuedBy      = queuedBy,
                Transactional = false,
                PublicX       = publicViewable,
                CCParents     = ccParents,
                CClist        = cclist,
                Testing       = Util.IsInRoleEmailTest,
                ReadyToSend   = false, // wait until all individual emailqueueto records are created.
            };

            EmailQueues.InsertOnSubmit(emailqueue);
            SubmitChanges();

            if (body.Contains("http://publiclink", ignoreCase: true))
            {
                var link = ServerLink("/EmailView/" + emailqueue.Id);
                var re   = new Regex("http://publiclink",
                                     RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase);
                emailqueue.Body = re.Replace(body, link);
            }

            var q = tag.People(this);

            IQueryable <int> q2 = null;

            if (emailqueue.CCParents == true)
            {
                q2 = from p in q.Distinct()
                     where (p.EmailAddress ?? "") != "" ||
                     (p.Family.HeadOfHousehold.EmailAddress ?? "") != "" ||
                     (p.Family.HeadOfHouseholdSpouse.EmailAddress ?? "") != ""
                     where (p.SendEmailAddress1 ?? true) ||
                     (p.SendEmailAddress2 ?? false) ||
                     (p.Family.HeadOfHousehold.SendEmailAddress1 ?? false) ||
                     (p.Family.HeadOfHousehold.SendEmailAddress2 ?? false) ||
                     (p.Family.HeadOfHouseholdSpouse.SendEmailAddress1 ?? false) ||
                     (p.Family.HeadOfHouseholdSpouse.SendEmailAddress2 ?? false)
                     where p.EmailOptOuts.All(oo => oo.FromEmail != emailqueue.FromAddr)
                     orderby p.PeopleId
                     select p.PeopleId;
            }
            else
            {
                q2 = from p in q.Distinct()
                     where p.EmailAddress != null
                     where p.EmailAddress != ""
                     where (p.SendEmailAddress1 ?? true) || (p.SendEmailAddress2 ?? false)
                     where p.EmailOptOuts.All(oo => oo.FromEmail != emailqueue.FromAddr)
                     orderby p.PeopleId
                     select p.PeopleId;
            }

            foreach (var pid in q2)
            {
                emailqueue.EmailQueueTos.Add(new EmailQueueTo
                {
                    PeopleId      = pid,
                    OrgId         = Util2.CurrentOrgId,
                    Guid          = Guid.NewGuid(),
                    GoerSupportId = goerSupporterId,
                });
            }
            emailqueue.ReadyToSend = true;
            SubmitChanges();
            return(emailqueue);
        }
Beispiel #10
0
        public void SendPeopleEmail(int queueid)
        {
            var emailqueue   = EmailQueues.Single(ee => ee.Id == queueid);
            var sysFromEmail = Util.SysFromEmail;
            var from         = Util.FirstAddress(emailqueue.FromAddr, emailqueue.FromName);

            if (!emailqueue.Subject.HasValue() || !emailqueue.Body.HasValue())
            {
                Util.SendMsg(sysFromEmail, CmsHost, from,
                             "sent emails - error", "no subject or body, no emails sent",
                             Util.ToMailAddressList(from),
                             emailqueue.Id, null);
                return;
            }

            var body = DoClickTracking(emailqueue);
            var m    = new EmailReplacements(this, body, from);

            emailqueue.Started = DateTime.Now;
            SubmitChanges();

            if (emailqueue.SendFromOrgId.HasValue)
            {
                var q2 = from om in OrganizationMembers
                         where om.OrganizationId == emailqueue.SendFromOrgId
                         where om.MemberTypeId != MemberTypeCode.InActive
                         where om.MemberTypeId != MemberTypeCode.Prospect
                         where (om.Pending ?? false) == false
                         let p = om.Person
                                 where p.EmailAddress != null
                                 where p.EmailAddress != ""
                                 where (p.SendEmailAddress1 ?? true) || (p.SendEmailAddress2 ?? false)
                                 select om.PeopleId;
                foreach (var pid in q2)
                {
                    emailqueue.EmailQueueTos.Add(new EmailQueueTo
                    {
                        PeopleId = pid,
                        OrgId    = emailqueue.SendFromOrgId,
                        Guid     = Guid.NewGuid(),
                    });
                }
                SubmitChanges();
            }

            var q = from To in EmailQueueTos
                    where To.Id == emailqueue.Id
                    where To.Sent == null
                    orderby To.PeopleId
                    select To;

            foreach (var To in q)
            {
#if DEBUG
#else
                try
                {
#endif
                var p    = LoadPersonById(To.PeopleId);
                var text = m.DoReplacements(p, To);
                var aa   = m.ListAddresses;

                if (Setting("sendemail", "true") != "false")
                {
                    Util.SendMsg(sysFromEmail, CmsHost, from,
                                 emailqueue.Subject, text, aa, emailqueue.Id, To.PeopleId);
                    To.Sent = DateTime.Now;

                    SubmitChanges();
                }
#if DEBUG
#else
            }
            catch (Exception ex)
            {
                Util.SendMsg(sysFromEmail, CmsHost, from,
                             "sent emails - error: {0}".Fmt(CmsHost), ex.Message,
                             Util.ToMailAddressList(from),
                             emailqueue.Id, null);
                Util.SendMsg(sysFromEmail, CmsHost, from,
                             "sent emails - error: {0}".Fmt(CmsHost), ex.Message,
                             Util.SendErrorsTo(),
                             emailqueue.Id, null);
            }
#endif
            }

            emailqueue.Sent = DateTime.Now;
            if (emailqueue.Redacted ?? false)
            {
                emailqueue.Body = "redacted";
            }
            else if (emailqueue.Transactional == false)
            {
                var nitems = emailqueue.EmailQueueTos.Count();
                if (nitems > 1)
                {
                    NotifySentEmails(from.Address, from.DisplayName,
                                     emailqueue.Subject, nitems, emailqueue.Id);
                }
            }
            SubmitChanges();
        }
Beispiel #11
0
        public void SendPeopleEmail(int queueid)
        {
            var emailqueue   = EmailQueues.Single(ee => ee.Id == queueid);
            var sysFromEmail = Util.SysFromEmail;
            var from         = Util.FirstAddress(emailqueue.FromAddr, emailqueue.FromName);

            if (!emailqueue.Subject.HasValue() || !emailqueue.Body.HasValue())
            {
                Util.SendMsg(sysFromEmail, CmsHost, from,
                             "sent emails - error", "no subject or body, no emails sent",
                             Util.ToMailAddressList(from),
                             emailqueue.Id, null);
                return;
            }

            var body = DoClickTracking(emailqueue);
            var m    = new EmailReplacements(this, body, from);

            emailqueue.Started = DateTime.Now;
            SubmitChanges();

            var cc = Util.ToMailAddressList(emailqueue.CClist);

            if (emailqueue.SendFromOrgId.HasValue)
            {
                var q2 = from om in OrganizationMembers
                         where om.OrganizationId == emailqueue.SendFromOrgId
                         where om.MemberTypeId != MemberTypeCode.InActive
                         where om.MemberTypeId != MemberTypeCode.Prospect
                         where (om.Pending ?? false) == false
                         let p = om.Person
                                 where p.EmailAddress != null
                                 where p.EmailAddress != ""
                                 where (p.SendEmailAddress1 ?? true) || (p.SendEmailAddress2 ?? false)
                                 where p.EmailOptOuts.All(oo => oo.FromEmail != emailqueue.FromAddr)
                                 select om.PeopleId;
                foreach (var pid in q2)
                {
                    // Protect against duplicate PeopleIDs ending up in the queue
                    if (emailqueue.EmailQueueTos.Any(pp => pp.PeopleId == pid))
                    {
                        continue;
                    }
                    emailqueue.EmailQueueTos.Add(new EmailQueueTo
                    {
                        PeopleId = pid,
                        OrgId    = emailqueue.SendFromOrgId,
                        Guid     = Guid.NewGuid(),
                    });
                }
                SubmitChanges();
            }

            var q = from To in EmailQueueTos
                    where To.Id == emailqueue.Id
                    where To.Sent == null
                    orderby To.PeopleId
                    select To;

            foreach (var To in q)
            {
#if DEBUG
#else
                try
                {
#endif
                var text = m.DoReplacements(To.PeopleId, To);
                var aa   = m.ListAddresses;

                if (Setting("sendemail", "true") != "false")
                {
                    Util.SendMsg(sysFromEmail, CmsHost, from,
                                 emailqueue.Subject, text, aa, emailqueue.Id, To.PeopleId, cc: cc);
                    To.Sent = DateTime.Now;
                    SubmitChanges();
                }
#if DEBUG
#else
            }
            catch (Exception ex)
            {
                Util.SendMsg(sysFromEmail, CmsHost, from,
                             $"sent emails - error: {CmsHost}", ex.Message,
                             Util.ToMailAddressList(from),
                             emailqueue.Id, null);
                Util.SendMsg(sysFromEmail, CmsHost, from,
                             $"sent emails - error: {CmsHost}", ex.Message,
                             Util.SendErrorsTo(),
                             emailqueue.Id, null);
            }
#endif
            }

            // Handle CC MailAddresses.  These do not get DoReplacement support.
            if (cc.Count > 0)
            {
                foreach (var ma in cc)
                {
#if DEBUG
#else
                    try
                    {
#endif
                    if (Setting("sendemail", "true") != "false")
                    {
                        List <MailAddress> mal = new List <MailAddress> {
                            ma
                        };
                        Util.SendMsg(sysFromEmail, CmsHost, from,
                                     emailqueue.Subject, body, mal, emailqueue.Id, null, cc: cc);
                    }
#if DEBUG
#else
                }
                catch (Exception ex)
                {
                    Util.SendMsg(sysFromEmail, CmsHost, from,
                                 "sent emails - error: " + CmsHost, ex.Message,
                                 Util.ToMailAddressList(from),
                                 emailqueue.Id, null);
                    Util.SendMsg(sysFromEmail, CmsHost, from,
                                 "sent emails - error: " + CmsHost, ex.Message,
                                 Util.SendErrorsTo(),
                                 emailqueue.Id, null);
                }
#endif
                }
            }

            emailqueue.Sent = DateTime.Now;
            if (emailqueue.Redacted ?? false)
            {
                emailqueue.Body = "redacted";
            }
            else if (emailqueue.Transactional == false)
            {
                var nitems = emailqueue.EmailQueueTos.Count();
                if (cc.Count > 0)
                {
                    nitems += cc.Count;
                }
                if (nitems > 1)
                {
                    NotifySentEmails(from.Address, from.DisplayName,
                                     emailqueue.Subject, nitems, emailqueue.Id);
                }
            }
            SubmitChanges();
        }
Beispiel #12
0
        public void SendPeopleEmail(int queueid)
        {
            var emailqueue   = EmailQueues.Single(ee => ee.Id == queueid);
            var sysFromEmail = Util.SysFromEmail;
            var from         = Util.FirstAddress(emailqueue.FromAddr, emailqueue.FromName);

            if (!emailqueue.Subject.HasValue() || !emailqueue.Body.HasValue())
            {
                Util.SendMsg(sysFromEmail, CmsHost, from,
                             "sent emails - error", "no subject or body, no emails sent",
                             Util.ToMailAddressList(from),
                             emailqueue.Id, null);
                return;
            }

            emailqueue.Started = DateTime.Now;
            SubmitChanges();

            var q = from To in EmailQueueTos
                    where To.Id == emailqueue.Id
                    where To.Sent == null
                    orderby To.PeopleId
                    select To;

            foreach (var To in q)
            {
                try
                {
                    var    p    = LoadPersonById(To.PeopleId);
                    string text = emailqueue.Body;
                    var    aa   = DoReplacements(ref text, CmsHost, p, To);
                    var    qs   = "OptOut/UnSubscribe/?enc=" + Util.EncryptForUrl("{0}|{1}".Fmt(To.PeopleId, from.Address));
                    var    url  = Util.URLCombine(CmsHost, qs);
                    var    link = @"<a href=""{0}"">Unsubscribe</a>".Fmt(url);
                    text = text.Replace("{unsubscribe}", link, ignoreCase: true);
                    if (aa.Count > 0)
                    {
                        text = text.Replace("{toemail}", aa[0].Address, ignoreCase: true);
                        text = text.Replace("%7Btoemail%7D", aa[0].Address);
                    }
                    text = text.Replace("{fromemail}", from.Address, ignoreCase: true);
                    text = text.Replace("%7Bfromemail%7D", from.Address);

                    if (Setting("sendemail", "true") != "false")
                    {
                        Util.SendMsg(sysFromEmail, CmsHost, from,
                                     emailqueue.Subject, text, aa, emailqueue.Id, To.PeopleId);
                        To.Sent = DateTime.Now;

                        SubmitChanges();
                    }
                }
                catch (Exception ex)
                {
                    Util.SendMsg(sysFromEmail, CmsHost, from,
                                 "sent emails - error: {0}".Fmt(CmsHost), ex.Message,
                                 Util.ToMailAddressList(from),
                                 emailqueue.Id, null);
                    Util.SendMsg(sysFromEmail, CmsHost, from,
                                 "sent emails - error: {0}".Fmt(CmsHost), ex.Message,
                                 Util.SendErrorsTo(),
                                 emailqueue.Id, null);
                }
            }
            emailqueue.Sent = DateTime.Now;
            if (emailqueue.Redacted ?? false)
            {
                emailqueue.Body = "redacted";
            }
            else if (emailqueue.Transactional == false)
            {
                var nitems = emailqueue.EmailQueueTos.Count();
                if (nitems > 1)
                {
                    NotifySentEmails(CmsHost, from.Address, from.DisplayName,
                                     emailqueue.Subject, nitems, emailqueue.Id);
                }
            }
            SubmitChanges();
        }
Beispiel #13
0
        public void SendPersonEmail(string CmsHost, int id, int pid)
        {
            var sysFromEmail = Util.SysFromEmail;
            var emailqueue   = EmailQueues.Single(eq => eq.Id == id);
            var emailqueueto = EmailQueueTos.Single(eq => eq.Id == id && eq.PeopleId == pid);
            var fromname     = emailqueue.FromName;

            if (!fromname.HasValue())
            {
                fromname = emailqueue.FromAddr;
            }
            else
            {
                fromname = emailqueue.FromName.Replace("\"", "");
            }
            var From = Util.FirstAddress(emailqueue.FromAddr, fromname);

            try
            {
                var    p    = LoadPersonById(emailqueueto.PeopleId);
                string text = emailqueue.Body;
                var    aa   = DoReplacements(ref text, CmsHost, p, emailqueueto);

                var qs   = "OptOut/UnSubscribe/?enc=" + Util.EncryptForUrl("{0}|{1}".Fmt(emailqueueto.PeopleId, From.Address));
                var url  = Util.URLCombine(CmsHost, qs);
                var link = @"<a href=""{0}"">Unsubscribe</a>".Fmt(url);
                text = text.Replace("{unsubscribe}", link, ignoreCase: true);
                text = text.Replace("{Unsubscribe}", link, ignoreCase: true);
                if (aa.Count > 0)
                {
                    text = text.Replace("{toemail}", aa[0].Address, ignoreCase: true);
                    text = text.Replace("%7Btoemail%7D", aa[0].Address, ignoreCase: true);
                }
                text = text.Replace("{fromemail}", From.Address, ignoreCase: true);
                text = text.Replace("%7Bfromemail%7D", From.Address, ignoreCase: true);

                if (Setting("sendemail", "true") != "false")
                {
                    if (aa.Count > 0)
                    {
                        Util.SendMsg(sysFromEmail, CmsHost, From, emailqueue.Subject, text, aa, emailqueue.Id, pid);
                    }
                    else
                    {
                        Util.SendMsg(sysFromEmail, CmsHost, From,
                                     "(no email address) " + emailqueue.Subject,
                                     "<p style='color:red'>You are receiving this because there is no email address for {0}({1}). You should probably contact them since they were probably expecting this information.</p>\n{2}".Fmt(p.Name, p.PeopleId, text),
                                     Util.ToMailAddressList(From),
                                     emailqueue.Id, pid);
                    }
                    emailqueueto.Sent = DateTime.Now;
                    emailqueue.Sent   = DateTime.Now;
                    if (emailqueue.Redacted ?? false)
                    {
                        emailqueue.Body = "redacted";
                    }
                    SubmitChanges();
                }
            }
            catch (Exception ex)
            {
                Util.SendMsg(sysFromEmail, CmsHost, From,
                             "sent emails - error", ex.ToString(),
                             Util.ToMailAddressList(From),
                             emailqueue.Id, null);
                throw ex;
            }
        }
Beispiel #14
0
        public void SendPeopleEmail(int queueid)
        {
            var emailqueue   = EmailQueues.Single(ee => ee.Id == queueid);
            var sysFromEmail = Util.SysFromEmail;
            var from         = Util.FirstAddress(emailqueue.FromAddr, emailqueue.FromName);

            if (!emailqueue.Subject.HasValue() || !emailqueue.Body.HasValue())
            {
                Util.SendMsg(sysFromEmail, CmsHost, from,
                             "sent emails - error", "no subject or body, no emails sent",
                             Util.ToMailAddressList(from),
                             emailqueue.Id, null);
                return;
            }

            var m = new EmailReplacements(this, emailqueue.Body, from);

            emailqueue.Started = DateTime.Now;
            SubmitChanges();

            var q = from To in EmailQueueTos
                    where To.Id == emailqueue.Id
                    where To.Sent == null
                    orderby To.PeopleId
                    select To;

            foreach (var To in q)
            {
#if DEBUG
#else
                try
                {
#endif
                var p    = LoadPersonById(To.PeopleId);
                var text = m.DoReplacements(p, To);
                var aa   = m.ListAddresses;

                if (Setting("sendemail", "true") != "false")
                {
                    Util.SendMsg(sysFromEmail, CmsHost, from,
                                 emailqueue.Subject, text, aa, emailqueue.Id, To.PeopleId);
                    To.Sent = DateTime.Now;

                    SubmitChanges();
                }
#if DEBUG
#else
            }
            catch (Exception ex)
            {
                Util.SendMsg(sysFromEmail, CmsHost, from,
                             "sent emails - error: {0}".Fmt(CmsHost), ex.Message,
                             Util.ToMailAddressList(from),
                             emailqueue.Id, null);
                Util.SendMsg(sysFromEmail, CmsHost, from,
                             "sent emails - error: {0}".Fmt(CmsHost), ex.Message,
                             Util.SendErrorsTo(),
                             emailqueue.Id, null);
            }
#endif
            }

            emailqueue.Sent = DateTime.Now;
            if (emailqueue.Redacted ?? false)
            {
                emailqueue.Body = "redacted";
            }
            else if (emailqueue.Transactional == false)
            {
                var nitems = emailqueue.EmailQueueTos.Count();
                if (nitems > 1)
                {
                    NotifySentEmails(from.Address, from.DisplayName,
                                     emailqueue.Subject, nitems, emailqueue.Id);
                }
            }
            SubmitChanges();
        }