public void CanRender() { EmailRenderer renderer = new EmailRenderer(); EmailMessage message = new EmailMessage(); message.From = "The beginning of the message"; message.Header = "the header"; message.Body = "the body"; var result = renderer.Render(message); }
public IEnumerable <string> GetEmailTemplates() { return(EmailRenderer.GetAllEmailTemplates()); }
public ActionResult HandleAjaxForm(FormCollection frm) { var typeName = frm["FullName"]; var form = new MCFlyApiController().GetByAlias(typeName); var type = UIOMatic.Helper.GetUIOMaticTypes().FirstOrDefault(x => x.FullName == typeName); var instance = Activator.CreateInstance(type); var dict = new Dictionary <string, object>(); foreach (PropertyInfo prop in type.GetProperties()) { if (prop.Name != "Id" && prop.Name != "Created" && prop.Name != "UmbracoPage") { var fld = form.Fields.FirstOrDefault(x => x.Alias == prop.Name); var val = fld.FieldType.Process(form, fld, !frm.AllKeys.Contains(prop.Name) ? null : frm[prop.Name], ControllerContext); if (val != null && val.ToString() != string.Empty) { prop.SetValue(instance, val); dict.Add(prop.Name, val); } } if (prop.Name == "Created") { prop.SetValue(instance, DateTime.Now); dict.Add("Created", DateTime.Now); } if (prop.Name == "UmbracoPage") { prop.SetValue(instance, frm["Umbraco.AssignedContentItem.Id"]); dict.Add("UmbracoPage", frm["Umbraco.AssignedContentItem.Id"]); } } //Server Side Validation //var context = new ValidationContext(instance, null, null); //var results = new List<ValidationResult>(); //Validator.TryValidateObject(instance, context, results, true); //if (results.Any()) //{ // foreach (var error in results) // { // ModelState.AddModelError(error.MemberNames.FirstOrDefault(), error.ErrorMessage); // } //} //if (!ModelState.IsValid) // return CurrentUmbracoPage(); ////workaround for nullable string props foreach (PropertyInfo prop in type.GetProperties()) { if (prop.Name != "Id" && prop.Name != "Created" && prop.Name != "UmbracoPage") { if (string.IsNullOrEmpty(frm[prop.Name]) && prop.PropertyType == typeof(string)) { var val = string.Empty; if (prop.GetValue(instance) == null) { prop.SetValue(instance, val); dict.Remove(prop.Name); dict.Add(prop.Name, val); } } } } //Store Record to DB if (form.StoresData) { UIOMaticObjectService.Instance.Create(type, dict); } //Send Emails foreach (var email in form.Emails) { var mm = new MailMessage { Body = EmailRenderer.Render(email.Template, instance, form, email, Umbraco.TypedContent(frm["Umbraco.AssignedContentItem.Id"])), IsBodyHtml = true, Subject = email.Subject ?? "New " + form.Name + " entry", From = new MailAddress(email.From) }; mm.To.Add(email.ToProperty != string.Empty ? new MailAddress(type.GetProperty(email.ToProperty).GetValue(instance).ToString()) : new MailAddress(email.To)); new SmtpClient().Send(mm); } //Do more stuff if (!string.IsNullOrEmpty(form.WebHookUrl)) { var client = new WebClient { Encoding = Encoding.UTF8 }; client.Headers[HttpRequestHeader.ContentType] = "application/json"; try { var response = client.UploadString(form.WebHookUrl, "POST", JsonConvert.SerializeObject(dict)); } catch (Exception ex) { //log } } return(Json(new { Success = true, })); }
//[ValidateGoogleCaptcha] public ActionResult HandleAjaxForm(FormCollection frm) { var typeName = frm["FullName"]; var form = new MCFlyApiController().GetByAlias(typeName); var type = UIOMatic.Helper.GetUIOMaticTypes().FirstOrDefault(x => x.FullName == typeName); var instance = Activator.CreateInstance(type); var dict = new Dictionary <string, object>(); foreach (PropertyInfo prop in type.GetProperties()) { if (prop.Name != "Id" && prop.Name != "Created" && prop.Name != "UmbracoPage" && prop.Name != "UmbracoMember") { var fld = form.Fields.FirstOrDefault(x => x.Alias == prop.Name); var val = fld.FieldType.Process(form, fld, !frm.AllKeys.Contains(prop.Name) ? null : frm[prop.Name], ControllerContext); if (fld.FieldType.FrontEndRenderView == "CheckBox" && (bool)val == false) { ModelState.AddModelError(string.Empty, $"The field {0} is required"); } if (val != null && val.ToString() != string.Empty) { prop.SetValue(instance, val); dict.Add(prop.Name, val); } } if (prop.Name == "Member") { var memberShipHelper = new MembershipHelper(Umbraco.UmbracoContext); var member = Services.MemberService.GetById(memberShipHelper.GetCurrentMemberId()); if (memberShipHelper.IsLoggedIn()) { prop.SetValue(instance, member.Name); dict.Add("UmbracoMember", member.Name); } else { prop.SetValue(instance, ""); dict.Add("UmbracoMember", ""); } } if (prop.Name == "Created") { prop.SetValue(instance, DateTime.Now); dict.Add("Created", DateTime.Now); } if (prop.Name == "UmbracoPage") { prop.SetValue(instance, frm["Umbraco.AssignedContentItem.Id"]); dict.Add("UmbracoPage", frm["Umbraco.AssignedContentItem.Id"]); } } // Server Side Validation var context = new ValidationContext(instance, null, null); var results = new List <ValidationResult>(); Validator.TryValidateObject(instance, context, results, true); if (results.Any()) { foreach (var error in results) { ModelState.AddModelError(error.MemberNames.FirstOrDefault(), error.ErrorMessage); } } if (!ModelState.IsValid) { return(Json(new { message = "Failure" })); } ////workaround for nullable string props foreach (PropertyInfo prop in type.GetProperties()) { if (prop.Name != "Id" && prop.Name != "Created" && prop.Name != "UmbracoPage" && prop.Name != "UmbracoMember") { if (string.IsNullOrEmpty(frm[prop.Name]) && prop.PropertyType == typeof(string)) { var val = string.Empty; if (prop.GetValue(instance) == null) { prop.SetValue(instance, val); dict.Remove(prop.Name); dict.Add(prop.Name, val); } } } } //Store Record to DB if (form.StoresData) { UIOMaticObjectService.Instance.Create(type, dict); } //Send Emails foreach (var email in form.Emails) { var mm = new MailMessage { Body = EmailRenderer.Render(email.Template, instance, form, email, Umbraco.TypedContent(frm["Umbraco.AssignedContentItem.Id"])), IsBodyHtml = true, Subject = email.Subject ?? "New " + form.Name + " entry", From = new MailAddress(email.From) }; mm.Headers.Add("X-Application", "Website"); mm.Headers.Add("MIME-Version", "1.0"); mm.Headers.Add("Content-Type", "text/html;charset=utf-8"); mm.Headers.Add("Content-Transfer-Encoding", "base64"); mm.SubjectEncoding = Encoding.UTF8; mm.HeadersEncoding = Encoding.UTF8; mm.BodyEncoding = Encoding.UTF8; mm.To.Add(email.ToProperty != string.Empty ? new MailAddress(type.GetProperty(email.ToProperty).GetValue(instance).ToString(), type.GetProperty(email.ToProperty).GetValue(instance).ToString(), Encoding.UTF8) : new MailAddress(email.To, email.To, Encoding.UTF8)); using (SmtpClient client = new SmtpClient()) { client.Send(mm); } } //Do more stuff if (!string.IsNullOrEmpty(form.WebHookUrl)) { var client = new WebClient { Encoding = Encoding.UTF8 }; client.Headers[HttpRequestHeader.ContentType] = "application/json"; try { var response = client.UploadString(form.WebHookUrl, "POST", JsonConvert.SerializeObject(dict)); } catch (Exception ex) { //log } } return(Json(new { Success = true })); }
static void Main(string[] args) { //spit out an error for empty args //would like to look at this further //var inputfile = FindDir("smallsample.txt"); //Make a folder for data like this - take out of git var inputfile = args[0]; EmailRenderer renderer = new EmailRenderer(); EmailFileParser parser = new EmailFileParser(); using (var file = new StreamReader(inputfile)) { var input = file.ReadToEnd(); //solve later :) //save result to file var path = @".\outputhtml.html"; if (File.Exists(@".\outputhtml.html")) // (File.Exists(path))? { try { File.Delete(@".\outputhtml.html"); } catch (System.IO.IOException e) { Console.WriteLine(e.Message); } } while (!string.IsNullOrEmpty(input)) { var message = parser.ParseEmailMessage(input, out input); //Console.WriteLine("---FROM -----------\n {0}", message.From); //Console.WriteLine("---HEADER ---------\n {0}", message.Header); //Console.WriteLine("---BODY -----------\n {0}", message.Body); //render the html messages - might no longer be relevant var result = renderer.Render(message); File.AppendAllText(path, result); //use the html agility pack var htmldoc = new HtmlDocument(); htmldoc.LoadHtml(message.Body); var htmlnodes = htmldoc.DocumentNode.SelectNodes("//body"); if (htmlnodes != null) { foreach (var node in htmlnodes) { Console.WriteLine(node.InnerText); //Console.WriteLine(node.XPath); //Console.WriteLine(node.InnerHtml); } } } } }
public override async Task <string> CreateEmailBodyAsync(BaseEmailTemplateModel emailTemplateModel) { Guard.ArgumentNotNull(nameof(emailTemplateModel), emailTemplateModel); return(await EmailRenderer.RenderViewToStringAsync("Views/ForgotPassword.cshtml", emailTemplateModel)); }