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; } }
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(); }
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(); }
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(); }
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(); }
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(); }
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; } }
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(); }