private int SendEmail(OutEmail om, string to = "") { if (string.IsNullOrEmpty(to)) { to = om.MailTo; } if (om.LastTry > DateTime.Now && DateTime.Now > om.LastTry.AddSeconds(TimeInterval)) { return(-1); } SmtpClient client = new SmtpClient(); string MailFrom = ConfigurationManager.AppSettings["MailFrom"]; MailMessage mm = new MailMessage(MailFrom, to); mm.IsBodyHtml = true; mm.SubjectEncoding = Encoding.GetEncoding(1255); mm.BodyEncoding = Encoding.UTF8; if (mm.Subject != null) { mm.Subject = om.Subject.Replace("\r\n", ""); } mm.Body = om.Body; try { client.Send(mm); return(0); } catch (Exception ex) { SF.LogError(ex); return(om.TimesSent + 1); } }
public ActionResult _AjaxDelete(OutEmail item, [DataSourceRequest] DataSourceRequest request) { if (ModelState.IsValid) { _db.OutEmails.Remove(_db.OutEmails.First(r => r.ID == item.ID)); _db.SaveChanges(); CleanCache.CleanOutputCache(); } return(Json(new[] { item }.ToDataSourceResult(request, ModelState))); }
public void Execute() { using (Db _db = new Db()) { OutEmail om = _db.OutEmails.Where(x => x.SendStatus == OutEmailStatus.NotSendedYet).FirstOrDefault();//get first witout count check, more optimal if (om == null) { return; } string mailTo = SF.getValidEmailsString(om.MailTo); if (string.IsNullOrEmpty(mailTo)) { om.SendStatus = OutEmailStatus.SendFailure;//wrong email _db.SaveChanges(); return; } int sent = SendEmail(om, mailTo); if (sent == -1) { return; } if (sent == 0) { //mark as sended and return om.SendStatus = OutEmailStatus.Sended; om.SendTime = DateTime.Now; _db.SaveChanges(); return; } if (sent <= TimesToSendMax) { om.TimesSent = sent; om.LastTry = DateTime.Now; // _db.OutEmails.Add(om); _db.SaveChanges(); } else { //mark as failure om.SendStatus = OutEmailStatus.SendFailure; _db.SaveChanges(); } } }
private int Tokenize(string SystemName, string ToEmail, IList <object> models) { if (_isGetTokensOnly) { tokens = new List <string>(); foreach (var o in models) { if (o == null) { continue; } var t = o.GetType(); var properties = t.GetProperties(); foreach (var p in properties) { tokens.Add(string.Format("%{0}.{1}%", t.Name, p.Name)); // %Order.Total% -> $345.34 } } return(0); } var LanguageCode = SF.GetLangCodeThreading(); var mailTemplate = _Context.EntityContext.MessageTemplates.FirstOrDefault(x => x.SystemName == SystemName && x.LanguageCode == LanguageCode); if (mailTemplate != null && mailTemplate.Active && !string.IsNullOrEmpty(ToEmail)) { StringBuilder Subject = new StringBuilder(mailTemplate.Subject); StringBuilder Body = new StringBuilder(mailTemplate.Body); string log = ""; if (mailTemplate.SystemName == "Order.UserCantPay.EmailToAdmin") { log += @"LOG mail template data "; } foreach (var o in models) { if (o == null) { continue; } var t = o.GetType(); var properties = t.GetProperties(); foreach (var p in properties) { string repl = ""; var value = p.GetValue(o); if (value != null) { repl = value.ToString(); } if (mailTemplate.SystemName == "Order.UserCantPay.EmailToAdmin") { log += string.Format("{0}.{1}", t.Name, p.Name) + @" = " + repl + @" "; } Subject.Replace(string.Format("%{0}.{1}%", t.Name, p.Name), repl); // %Order.Total% -> $345.34 Body.Replace(string.Format("%{0}.{1}%", t.Name, p.Name), repl); // %Order.Total% -> $345.34 } } if (mailTemplate.SystemName == "Order.UserCantPay.EmailToAdmin") { log += @" template Body: " + mailTemplate.Body; log += @" template Subject: " + mailTemplate.Subject; log += @" result Body: " + Body.ToString(); log += @" result Subject: " + Subject.ToString(); var acitvitylog = new ActivityLog() { CreateOn = DateTime.Now, FullText = log, UserID = Guid.Empty, ActivityType = ActivityType.Other }; _Context.EntityContext.ActivityLogs.Add(acitvitylog); _Context.EntityContext.SaveChanges(); } var email = new OutEmail() { Body = Body.ToString(), Subject = Subject.ToString(), MailTo = ToEmail, }; _Context.EntityContext.OutEmails.Add(email); _Context.EntityContext.SaveChanges(); return(email.ID); } if (mailTemplate == null) { //add to log or create automatic var template = new MessageTemplate() { Active = false, Body = "Auto generated, please change", LanguageCode = SF.GetLangCodeThreading(), Subject = "Auto generated", SystemName = SystemName }; _Context.EntityContext.MessageTemplates.Add(template); _Context.EntityContext.SaveChanges(); } return(0); }