Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • MartinB 411 posts 512 karma points
    Feb 02, 2012 @ 14:28
    MartinB
    0

    Adding a Phone field

    Hi there

    I've tried to add a phone field, by comparing the current fields and their values.

    So i've gotten to this, which gives me an error:

    Error loading MacroEngine script (file: ~/macroscripts/cultivcontactform.cshtml)
    

    Code:

    @{ 
        Page.FormVariables = new FormVariables(Parameter, Model);
        Page.Errors = new List<string>();
        Page.Model = Model;
    }
    
    <div class="form-box">
        @(HttpContext.Current.Request["form-posted"] != "1" ? RenderContactForm() : TrySendForm())
    </div>
    
    @helper RenderContactForm()
    {
        <a id="cultivcontactform"></a>
        <form action="#cultivcontactform" method="post" class="contact-form">
            <fieldset>
                <input type="hidden" name="form-posted" value="1" />
    
                @RenderTextField(Page.FormVariables.Name, Page.FormVariables.NameFieldName, Page.FormVariables.NameFieldError, "text")
                @RenderTextField(Page.FormVariables.Phone, Page.FormVariables.PhoneFieldName, Page.FormVariables.PhoneFieldError, "text")           
                @RenderTextField(Page.FormVariables.Email, Page.FormVariables.EmailFieldName, Page.FormVariables.EmailFieldError, "text")           
                @RenderTextareaField(Page.FormVariables.Message, Page.FormVariables.MessageFieldName, Page.FormVariables.MessageFieldError, "textarea")
                @RenderCheckboxField(Page.FormVariables.SendCopy, Page.FormVariables.SendCopyFieldName, "", "checkbox")
    
                <div class="row">
                    <input type="submit" id="cultivcontactformsubmit" />
                    @if (Page.Errors.Count > 0 && Page.Errors.Contains("Other") == false)
                    {
                        <div class="note">@Page.FormVariables.ErrorsInForm</div>
                    }
                    @if (Page.Errors.Count > 0 && Page.Errors.Contains("Other"))
                    {
                        <div class="note">@Page.FormVariables.ErrorSendingForm</div>
                    }
                </div>
            </fieldset>
        </form>
    }
    
    @helper RenderTextField(string fieldLabel, string fieldName, string errorText, string className)
    {
        <div class="row">
            @if (Page.Errors.Contains(fieldName))
            {
                <span class="error">@errorText</span>
            }
            <label for="@fieldName">@fieldLabel</label><br />
            <input type="text" id="@fieldName" name="@fieldName" class="default @className @(Page.Errors.Contains(fieldName) ? "error" : "")" value="@HttpContext.Current.Request[fieldName]" />       
        </div>
    }
    
    @helper RenderTextareaField(string fieldLabel, string fieldName, string errorText, string className)
    {
        <div class="row">
            @if (Page.Errors.Contains(fieldName))
            {
                <span class="error">@errorText</span>
            }
            <label for="@fieldName">@fieldLabel</label><br />
            <textarea id="@fieldName" name="@fieldName" class="textarea default @className @(Page.Errors.Contains(fieldName) ? "error" : "")" cols="30" rows="10">@HttpContext.Current.Request[fieldName]</textarea>       
        </div>
    }
    @helper RenderCheckboxField(string fieldLabel, string fieldName, string errorText, string className)
     {
        <div class="row">
            @if (Page.Errors.Contains(fieldName))
            {
                <span class="error">@errorText</span>
            }
            <input type="checkbox" id="@fieldName" name="@fieldName" class="default @className @(Page.Errors.Contains(fieldName) ? "error" : "")" @(HttpContext.Current.Request[Page.FormVariables.SendCopyFieldName] == "on" ? "checked=checked" : "") />
            <label for="@fieldName">@fieldLabel</label>       
        </div>
    }
    
    @helper TrySendForm()
    {
        if (Request.Url.AbsoluteUri.Contains("form-posted") == false)
        {
            Page.Errors = GetFormErrors();
            if (Page.Errors.Count == 0)
            {
                Page.Errors.AddRange(TrySendMail(Page, GetMailVariables(Page)));
    
                var sendCopy = HttpContext.Current.Request[Page.FormVariables.SendCopyFieldName] == "on";
                if (sendCopy)
                {
                    Page.Errors.AddRange(TrySendMail(Page, GetMailVariablesCopyToSender(Page)));
                }
    
                if (Page.Errors.Count == 0)
                {
                    Response.Redirect(Page.FormVariables.RedirectUrl);
                }
            }
            else
            {
                @RenderContactForm()
            }
        }
        else
        {
            <p class="sent-confirmation">@Page.FormVariables.FormSentConfirmation</p>
        } 
    }
    @functions 
    {
        private static List<string> GetFormErrors()
        {
            var errorFields = new List<string>();
            foreach (string key in HttpContext.Current.Request.Form)
            {
                if (key.EndsWith("-req") && HttpContext.Current.Request.Form[key] == "")
                {
                    errorFields.Add(key);
                }
                if (key.EndsWith("-req-mail") && (HttpContext.Current.Request.Form[key] == "" || System.Text.RegularExpressions.Regex.IsMatch(HttpContext.Current.Request.Form[key], @"[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?") == false))
                {
                    errorFields.Add(key);
                }
            }
            return errorFields;
        }
    
        private static MailVariables GetMailVariables(dynamic page)
        {
            var mailVariables = new MailVariables
                                    {
                                        Content = GetMailContent(page, page.FormVariables.MailIntroText),
                                        From = page.FormVariables.MailFrom,
                                        // To make sure your mail isn't marked as spam the from address
                                        // is always the configured "from" address, make sure the domain 
                                        // corresponds with your SMTP server configuration
    
                                        FromName = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.NameFieldName]),
                                        ReplyTo = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.EmailFieldName]),
                                        Subject = page.FormVariables.MailSubject,
                                        To = page.FormVariables.MailFrom,
                                        ToName = page.FormVariables.MailFromName,
                                        EnableSsl = page.FormVariables.EnableSsl
                                    };
    
            return mailVariables;
        }
    
        private static MailVariables GetMailVariablesCopyToSender(dynamic page)
        {
            var mailVariables = new MailVariables
                                    {
                                        Content = GetMailContent(page, page.FormVariables.MailIntroTextCopyToSender),
                                        From = page.FormVariables.MailFrom,
                                        // To make sure your mail isn't marked as spam the from address
                                        // is always the configured "from" address, make sure the domain 
                                        // corresponds with your SMTP server configuration
    
                                        FromName = page.FormVariables.MailFromName,
                                        ReplyTo = page.FormVariables.MailFrom,
                                        Subject = page.FormVariables.MailSubjectCopyToSender,
                                        To = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.EmailFieldName]),
                                        ToName = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.NameFieldName]),
                                        EnableSsl = page.FormVariables.EnableSsl
                                    };
    
            return mailVariables;
        }
    
        private static string GetMailContent(dynamic page, string mailIntroText)
        {
            var phone = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.PhoneFieldName]);
            var name = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.NameFieldName]);
            var email = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.EmailFieldName]);     
            var message = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.MessageFieldName]).Replace("\n", "<br />");
    
            var mailContent = string.Format(
                                     "{0}<br /><br /><table><tr><td valign=\"top\"><p><strong>{1}</strong></p></td><td valign=\"top\"><p>{2}</p></td></tr><tr><td valign=\"top\"><p><strong>{3}</strong></p></td><td valign=\"top\"><p>{4}</p></td></tr><tr><td valign=\"top\"><p><strong>{5}</strong></p></td><td valign=\"top\"><p>{6}</p></td></tr></table>",
                                     SurroundWithArial(mailIntroText),
                                     SurroundWithArial(page.FormVariables.Name),
                                     SurroundWithArial(name),
                                     SurroundWithArial(page.FormVariables.Phone),
                                     SurroundWithArial(phone),
                                     SurroundWithArial(page.FormVariables.Email),
                                     SurroundWithArial(email),
                                     SurroundWithArial(page.FormVariables.Message),
                                     SurroundWithArial(message)
                        );
    
            // This if and the mailTemplateProperty are here to make the code 4.7.0 compatible
            // As of 4.7.1 you only have to do: 
            // if(page.Model.MailTemplate.ToString() != "") { var mailTemplate = page.Model.MailTemplate.ToString(); //start replacements }
            if (page.Model.MailTemplate.GetType() != typeof(umbraco.MacroEngines.DynamicNull))
            {
                var mailTemplateProperty = page.Model.MailTemplate;
                var mailTemplate = mailTemplateProperty.GetType() == typeof(umbraco.MacroEngines.DynamicXml)
                                       ? mailTemplateProperty.ToXml().ToString().Trim()
                                       : mailTemplateProperty.ToString();
    
                if (mailTemplate != "")
                {
                    mailTemplate = mailTemplate.Replace("%%INTROTEXT%%", mailIntroText);
                    mailTemplate = mailTemplate.Replace("%%NAMELABEL%%", page.FormVariables.Name);
                    mailTemplate = mailTemplate.Replace("%%NAME%%", name);
                    mailTemplate = mailTemplate.Replace("%%PHONELABEL%%", page.FormVariables.Phone);
                    mailTemplate = mailTemplate.Replace("%%PHONE%%", phone);
                    mailTemplate = mailTemplate.Replace("%%EMAILLABEL%%", page.FormVariables.Email);
                    mailTemplate = mailTemplate.Replace("%%EMAIL%%", email);
                    mailTemplate = mailTemplate.Replace("%%MESSAGELABEL%%", page.FormVariables.Message);
                    mailTemplate = mailTemplate.Replace("%%MESSAGE%%", message);
    
                    mailContent = mailTemplate;
                }
            }
    
            return mailContent;
        }
    
        private static string SurroundWithArial(string input)
        {
            return string.Format("<font face=\"Arial\" size=\"3\">{0}</font>", input);
        }
    
        private static IEnumerable<string> TrySendMail(dynamic page, MailVariables mailVariables)
        {
            var mailSent = SendMail(mailVariables);
            if (mailSent == false)
            {
                page.Errors.Add("Other");
            }
    
            return page.Errors;
        }
    
        public static bool SendMail(MailVariables mailVariables)
        {
            try
            {
                var mailMsg = new System.Net.Mail.MailMessage
                {
                    From = new System.Net.Mail.MailAddress(HttpUtility.HtmlEncode(mailVariables.From), HttpUtility.HtmlEncode(mailVariables.FromName)),
                    Subject = mailVariables.Subject,
                    Body = mailVariables.Content,
                    IsBodyHtml = true
                };
    
                mailMsg.To.Add(new System.Net.Mail.MailAddress(HttpUtility.HtmlEncode(mailVariables.To), HttpUtility.HtmlEncode(mailVariables.ToName)));
                mailMsg.Bcc.Add(new System.Net.Mail.MailAddress(HttpUtility.HtmlEncode(mailVariables.From)));
                mailMsg.ReplyToList.Add(new System.Net.Mail.MailAddress(mailVariables.ReplyTo));
    
                var smtpClient = new System.Net.Mail.SmtpClient { EnableSsl = mailVariables.EnableSsl };
    
                smtpClient.Send(mailMsg);
                return true;
            }
            catch (Exception ex)
            {
                umbraco.BusinessLogic.Log.Add(umbraco.BusinessLogic.LogTypes.Error, -1, string.Format("Error creating or sending contact mail, check if there is a mailFrom property on your document and that it has a value, or specify a MailFrom parameter on the macro call exception: {0}", ex.InnerException));
            }
    
            return false;
        }
    
        public class FormVariables
        {
            public FormVariables(dynamic parameter, dynamic model)
            {
                var modelMailFrom = model.MailFrom.GetType() != typeof(umbraco.MacroEngines.DynamicNull) ? model.MailFrom : "";
                var modelMailFromName = model.MailFromName.GetType() != typeof(umbraco.MacroEngines.DynamicNull) ? model.MailFromName : "";
    
                MailFrom = GetParamValue(parameter.MailFrom) ?? GetParamValue(modelMailFrom);
                MailFromName = GetParamValue(parameter.MailFromName) ?? GetParamValue(modelMailFromName);
    
                Name = GetParamValue(parameter.FormLabelName) ?? "Name";
                Phone = GetParamValue(parameter.FormLabelPhone) ?? "Phone";
                Email = GetParamValue(parameter.FormLabelEmail) ?? "E-mail";
                Message = GetParamValue(parameter.FormLabelMessage) ?? "Message";
                SendCopy = GetParamValue(parameter.FormLabelSendCopy) ?? "Send me a copy of this mail";
    
                ErrorsInForm = GetParamValue(parameter.FormValidationError) ?? "Please check the highlighted fields for errors";
                ErrorsendingForm = GetParamValue(parameter.FormGenericError) ?? "There was a technical error sending the form, please try again or contact us in an alternative way.";
    
                MailSubject = GetParamValue(parameter.MailSubject) ?? "Contact mail";
                MailIntroText = GetParamValue(parameter.MailIntroText) ?? "A contact mail has been submitted with the following details:";
    
                MailSubjectCopyToSender = GetParamValue(parameter.MailSubjectCopyToSender) ?? "Copy of contact mail";
                MailIntroTextCopyToSender = GetParamValue(parameter.MailIntroTextCopyToSender) ?? "You have contacted us with the information below, we will get back to you soon.";
    
                FormSentConfirmation = GetParamValue(parameter.FormSentConfirmation) ?? "Thank you, we will get back to you soon.";
    
                RedirectUrl = GetParamValue(parameter.RedirectUrl) ?? model.Url + "?form-posted=1";
    
                bool enableSsl;
                bool.TryParse(parameter.EnableSsl, out enableSsl);
                EnableSsl = enableSsl;
    
                NameFieldName = "name-req";
                NameFieldError = GetParamValue(parameter.NameFieldError) ?? "Please enter your name";
                NameFieldName = "phone-req";
                NameFieldError = GetParamValue(parameter.PhoneFieldError) ?? "Please enter your phone no.";
                EmailFieldName = "email-req-mail";
                EmailFieldError = GetParamValue(parameter.EmailFieldError) ?? "Please enter a valid e-mailddress";
                MessageFieldName = "message-req";
                MessageFieldError = GetParamValue(parameter.MessageFieldError) ?? "Please enter a message";
                SendCopyFieldName = "sendcopy";
            }
    
            public string MailFrom { get; set; }
            public string MailFromName { get; set; }
    
            public string Name { get; set; }
        public string Phone { get; set; }
            public string Email { get; set; }
            public string Message { get; set; }
            public string SendCopy { get; set; }
    
            public string ErrorsInForm { get; set; }
            public string ErrorsendingForm { get; set; }
    
            public string MailSubject { get; set; }
            public string MailIntroText { get; set; }
    
            public string MailSubjectCopyToSender { get; set; }
            public string MailIntroTextCopyToSender { get; set; }
    
            public string FormSentConfirmation { get; set; }
    
            public string RedirectUrl { get; set; }
            public bool EnableSsl { get; set; }
    
            public string NameFieldName { get; set; }
            public string NameFieldError { get; set; }
            public string PhoneFieldName { get; set; }
            public string PhoneFieldError { get; set; }
            public string EmailFieldName { get; set; }
            public string EmailFieldError { get; set; }
            public string MessageFieldName { get; set; }
            public string MessageFieldError { get; set; }
            public string SendCopyFieldName { get; set; }
    
            public static string GetParamValue(dynamic input)
            {
                if (input != null && input.StartsWith("[!") && input.EndsWith("]"))
                {
                    var dictKey = input.Substring(2, input.LastIndexOf("]") - 2);
                    input = library.GetDictionaryItem(dictKey);
                }
    
                return input;
            }
        }
    
        public class MailVariables
        {
            public string Content { get; set; }
            public string Subject { get; set; }
            public string To { get; set; }
            public string ToName { get; set; }
            public string From { get; set; }
            public string FromName { get; set; }
            public string ReplyTo { get; set; }
            public bool EnableSsl { get; set; }
        }
    }
  • MartinB 411 posts 512 karma points
    Feb 02, 2012 @ 14:30
    MartinB
    0

    Any help is much appreciated!

  • MartinB 411 posts 512 karma points
    Feb 02, 2012 @ 14:37
    MartinB
    0

    Ah DOH!

    I forgot to correct the second set of NameFieldName to PhoneFieldName and NameFieldError to PhoneFieldError.

    My bad!

  • Anders Schmidt 76 posts 207 karma points
    Oct 12, 2013 @ 21:51
    Anders Schmidt
    0

    Thanks. Used your code but the message is not in email.

    My code:

     

    @{ 
        Page.FormVariables = new FormVariables(Parameter, Model);
        Page.Errors = new List<string>();
        Page.Model = Model;
    }
    
    <div class="form-box">
        @(HttpContext.Current.Request["form-posted"] != "1" ? RenderContactForm() : TrySendForm())
    </div>
    
    @helper RenderContactForm()
    {
        <a id="cultivcontactform"></a>
        <form action="#cultivcontactform" method="post" class="contact-form">
            <fieldset>
                <input type="hidden" name="form-posted" value="1" />
    
                @RenderTextField(Page.FormVariables.Name, Page.FormVariables.NameFieldName, Page.FormVariables.NameFieldError, "text")
                @RenderTextField(Page.FormVariables.Phone, Page.FormVariables.PhoneFieldName, Page.FormVariables.PhoneFieldError, "text")           
                @RenderTextField(Page.FormVariables.Email, Page.FormVariables.EmailFieldName, Page.FormVariables.EmailFieldError, "text")           
                @RenderTextareaField(Page.FormVariables.Message, Page.FormVariables.MessageFieldName, Page.FormVariables.MessageFieldError, "textarea")
                @RenderCheckboxField(Page.FormVariables.SendCopy, Page.FormVariables.SendCopyFieldName, "", "checkbox")
    
                <div class="row">
                    <input type="submit" value="Send" id ="cultivcontactformsubmit" />
                    @if (Page.Errors.Count > 0 && Page.Errors.Contains("Other") == false)
                    {
                        <div class="note">@Page.FormVariables.ErrorsInForm</div>
                    }
                    @if (Page.Errors.Count > 0 && Page.Errors.Contains("Other"))
                    {
                        <div class="note">@Page.FormVariables.ErrorSendingForm</div>
                    }
                </div>
            </fieldset>
        </form>
    }
    
    @helper RenderTextField(string fieldLabel, string fieldName, string errorText, string className)
    {
        <div class="row">
            @if (Page.Errors.Contains(fieldName))
            {
                <span class="error">@errorText</span>
            }
            <label for="@fieldName">@fieldLabel</label><br />
            <input type="text" id="@fieldName" name="@fieldName" class="default @className@(Page.Errors.Contains(fieldName) ? "error" : "")" value="@HttpContext.Current.Request[fieldName]" />       
        </div>
    }
    
    @helper RenderTextareaField(string fieldLabel, string fieldName, string errorText, string className)
    {
        <div class="row">
            @if (Page.Errors.Contains(fieldName))
            {
                <span class="error">@errorText</span>
            }
            <label for="@fieldName">@fieldLabel</label><br />
            <textarea id="@fieldName" name="@fieldName" class="textarea default @className@(Page.Errors.Contains(fieldName) ? "error" : "")" cols="30" rows="10">@HttpContext.Current.Request[fieldName]</textarea>       
        </div>
    }
    @helper RenderCheckboxField(string fieldLabel, string fieldName, string errorText, string className)
     {
        <div class="row sendToMe">
            @if (Page.Errors.Contains(fieldName))
            {
                <span class="error">@errorText</span>
            }
            <input type="checkbox" id="@fieldName" name="@fieldName" class="default @className@(Page.Errors.Contains(fieldName) ? "error" : "")" @(HttpContext.Current.Request[Page.FormVariables.SendCopyFieldName] == "on" ? "checked=checked" : "") />
            <label for="@fieldName" >@fieldLabel</label>       
        </div>
    }
    
    @helper TrySendForm()
    {
        if (Request.Url.AbsoluteUri.Contains("form-posted") == false)
        {
            Page.Errors = GetFormErrors();
            if (Page.Errors.Count == 0)
            {
                Page.Errors.AddRange(TrySendMail(Page, GetMailVariables(Page)));
    
                var sendCopy = HttpContext.Current.Request[Page.FormVariables.SendCopyFieldName] == "on";
                if (sendCopy)
                {
                    Page.Errors.AddRange(TrySendMail(Page, GetMailVariablesCopyToSender(Page)));
                }
    
                if (Page.Errors.Count == 0)
                {
                    Response.Redirect(Page.FormVariables.RedirectUrl);
                }
            }
            else
            {
                @RenderContactForm()
            }
        }
        else
        {
            <p class="sent-confirmation">@Page.FormVariables.FormSentConfirmation</p>
        } 
    }
    @functions {
        private static List<string> GetFormErrors()
        {
            var errorFields = new List<string>();
            foreach (string key in HttpContext.Current.Request.Form)
            {
                if (key.EndsWith("-req") && HttpContext.Current.Request.Form[key] == "")
                {
                    errorFields.Add(key);
                }
                if (key.EndsWith("-req-mail") && (HttpContext.Current.Request.Form[key] == "" || System.Text.RegularExpressions.Regex.IsMatch(HttpContext.Current.Request.Form[key], @"[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?") == false))
                {
                    errorFields.Add(key);
                }
            }
            return errorFields;
        }
    
        private static MailVariables GetMailVariables(dynamic page)
        {
            var mailVariables = new MailVariables
                                    {
                                        Content = GetMailContent(page, page.FormVariables.MailIntroText),
                                        From = page.FormVariables.MailFrom,
                                        // To make sure your mail isn't marked as spam the from address
                                        // is always the configured "from" address, make sure the domain 
                                        // corresponds with your SMTP server configuration
    
                                        FromName = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.NameFieldName]),
                                        ReplyTo = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.EmailFieldName]),
                                        Subject = page.FormVariables.MailSubject,
                                        To = page.FormVariables.MailFrom,
                                        ToName = page.FormVariables.MailFromName,
                                        EnableSsl = page.FormVariables.EnableSsl
                                    };
    
            return mailVariables;
        }
    
        private static MailVariables GetMailVariablesCopyToSender(dynamic page)
        {
            var mailVariables = new MailVariables
                                    {
                                        Content = GetMailContent(page, page.FormVariables.MailIntroTextCopyToSender),
                                        From = page.FormVariables.MailFrom,
                                        // To make sure your mail isn't marked as spam the from address
                                        // is always the configured "from" address, make sure the domain 
                                        // corresponds with your SMTP server configuration
    
                                        FromName = page.FormVariables.MailFromName,
                                        ReplyTo = page.FormVariables.MailFrom,
                                        Subject = page.FormVariables.MailSubjectCopyToSender,
                                        To = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.EmailFieldName]),
                                        ToName = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.NameFieldName]),
                                        EnableSsl = page.FormVariables.EnableSsl
                                    };
    
            return mailVariables;
        }
    
        private static string GetMailContent(dynamic page, string mailIntroText)
        {
            var phone = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.PhoneFieldName]);
            var name = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.NameFieldName]);
            var email = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.EmailFieldName]);     
            var message = HttpUtility.HtmlEncode(HttpContext.Current.Request[page.FormVariables.MessageFieldName]).Replace("\n", "<br />");
    
            var mailContent = string.Format(
                                     "{0}<br /><br /><table><tr><td valign=\"top\"><p><strong>{1}</strong></p></td><td valign=\"top\"><p>{2}</p></td></tr><tr><td valign=\"top\"><p><strong>{3}</strong></p></td><td valign=\"top\"><p>{4}</p></td></tr><tr><td valign=\"top\"><p><strong>{5}</strong></p></td><td valign=\"top\"><p>{6}</p></td></tr></table>",
                                     SurroundWithArial(mailIntroText),
                                     SurroundWithArial(page.FormVariables.Name),
                                     SurroundWithArial(name),
                                     SurroundWithArial(page.FormVariables.Phone),
                                     SurroundWithArial(phone),
                                     SurroundWithArial(page.FormVariables.Email),
                                     SurroundWithArial(email),
                                     SurroundWithArial(page.FormVariables.Message),
                                     SurroundWithArial(message)
                        );
    
            // This if and the mailTemplateProperty are here to make the code 4.7.0 compatible
            // As of 4.7.1 you only have to do: 
            // if(page.Model.MailTemplate.ToString() != "") { var mailTemplate = page.Model.MailTemplate.ToString(); //start replacements }
            if (page.Model.MailTemplate.GetType() != typeof(umbraco.MacroEngines.DynamicNull))
            {
                var mailTemplateProperty = page.Model.MailTemplate;
                var mailTemplate = mailTemplateProperty.GetType() == typeof(umbraco.MacroEngines.DynamicXml)
                                       ? mailTemplateProperty.ToXml().ToString().Trim()
                                       : mailTemplateProperty.ToString();
    
                if (mailTemplate != "")
                {
                    mailTemplate = mailTemplate.Replace("%%INTROTEXT%%", mailIntroText);
                    mailTemplate = mailTemplate.Replace("%%NAMELABEL%%", page.FormVariables.Name);
                    mailTemplate = mailTemplate.Replace("%%NAME%%", name);
                    mailTemplate = mailTemplate.Replace("%%PHONELABEL%%", page.FormVariables.Phone);
                    mailTemplate = mailTemplate.Replace("%%PHONE%%", phone);
                    mailTemplate = mailTemplate.Replace("%%EMAILLABEL%%", page.FormVariables.Email);
                    mailTemplate = mailTemplate.Replace("%%EMAIL%%", email);
                    mailTemplate = mailTemplate.Replace("%%MESSAGELABEL%%", page.FormVariables.Message);
                    mailTemplate = mailTemplate.Replace("%%MESSAGE%%", message);
    
                    mailContent = mailTemplate;
                }
            }
    
            return mailContent;
        }
    
        private static string SurroundWithArial(string input)
        {
            return string.Format("<font face=\"Arial\" size=\"3\">{0}</font>", input);
        }
    
        private static IEnumerable<string> TrySendMail(dynamic page, MailVariables mailVariables)
        {
            var mailSent = SendMail(mailVariables);
            if (mailSent == false)
            {
                page.Errors.Add("Other");
            }
    
            return page.Errors;
        }
    
        public static bool SendMail(MailVariables mailVariables)
        {
            try
            {
                var mailMsg = new System.Net.Mail.MailMessage
                {
                    From = new System.Net.Mail.MailAddress(HttpUtility.HtmlEncode(mailVariables.From), HttpUtility.HtmlEncode(mailVariables.FromName)),
                    Subject = mailVariables.Subject,
                    Body = mailVariables.Content,
                    IsBodyHtml = true
                };
    
                mailMsg.To.Add(new System.Net.Mail.MailAddress(HttpUtility.HtmlEncode(mailVariables.To), HttpUtility.HtmlEncode(mailVariables.ToName)));
                mailMsg.Bcc.Add(new System.Net.Mail.MailAddress(HttpUtility.HtmlEncode(mailVariables.From)));
                mailMsg.ReplyToList.Add(new System.Net.Mail.MailAddress(mailVariables.ReplyTo));
    
                var smtpClient = new System.Net.Mail.SmtpClient { EnableSsl = mailVariables.EnableSsl };
    
                smtpClient.Send(mailMsg);
                return true;
            }
            catch (Exception ex)
            {
                umbraco.BusinessLogic.Log.Add(umbraco.BusinessLogic.LogTypes.Error, -1, string.Format("Error creating or sending contact mail, check if there is a mailFrom property on your document and that it has a value, or specify a MailFrom parameter on the macro call exception: {0}", ex.InnerException));
            }
    
            return false;
        }
    
        public class FormVariables
        {
            public FormVariables(dynamic parameter, dynamic model)
            {
                var modelMailFrom = model.MailFrom.GetType() != typeof(umbraco.MacroEngines.DynamicNull) ? model.MailFrom : "";
                var modelMailFromName = model.MailFromName.GetType() != typeof(umbraco.MacroEngines.DynamicNull) ? model.MailFromName : "";
    
                MailFrom = GetParamValue(parameter.MailFrom) ?? GetParamValue(modelMailFrom);
                MailFromName = GetParamValue(parameter.MailFromName) ?? GetParamValue(modelMailFromName);
    
                Name = GetParamValue(parameter.FormLabelName) ?? "Name";
                Phone = GetParamValue(parameter.FormLabelPhone) ?? "Phone";
                Email = GetParamValue(parameter.FormLabelEmail) ?? "E-mail";
                Message = GetParamValue(parameter.FormLabelMessage) ?? "Message";
                SendCopy = GetParamValue(parameter.FormLabelSendCopy) ?? "Send me a copy of this mail";
    
                ErrorsInForm = GetParamValue(parameter.FormValidationError) ?? "Please check the highlighted fields for errors";
                ErrorsendingForm = GetParamValue(parameter.FormGenericError) ?? "There was a technical error sending the form, please try again or contact us in an alternative way.";
    
                MailSubject = GetParamValue(parameter.MailSubject) ?? "Contact mail";
                MailIntroText = GetParamValue(parameter.MailIntroText) ?? "A contact mail has been submitted with the following details:";
    
                MailSubjectCopyToSender = GetParamValue(parameter.MailSubjectCopyToSender) ?? "Copy of contact mail";
                MailIntroTextCopyToSender = GetParamValue(parameter.MailIntroTextCopyToSender) ?? "You have contacted us with the information below, we will get back to you soon.";
    
                FormSentConfirmation = GetParamValue(parameter.FormSentConfirmation) ?? "Thank you, we will get back to you soon.";
    
                RedirectUrl = GetParamValue(parameter.RedirectUrl) ?? model.Url + "?form-posted=1";
    
                bool enableSsl;
                bool.TryParse(parameter.EnableSsl, out enableSsl);
                EnableSsl = enableSsl;
    
                NameFieldName = "name-req";
                NameFieldError = GetParamValue(parameter.NameFieldError) ?? "Please enter your name";
                PhoneFieldName = "phone-req";
                PhoneFieldError = GetParamValue(parameter.PhoneFieldError) ?? "Please enter your phone no.";
                EmailFieldName = "email-req-mail";
                EmailFieldError = GetParamValue(parameter.EmailFieldError) ?? "Please enter a valid e-mailddress";
                MessageFieldName = "message-req";
                MessageFieldError = GetParamValue(parameter.MessageFieldError) ?? "Please enter a message";
                SendCopyFieldName = "sendcopy";
            }
    
            public string MailFrom { get; set; }
            public string MailFromName { get; set; }
    
            public string Name { get; set; }
        public string Phone { get; set; }
            public string Email { get; set; }
            public string Message { get; set; }
            public string SendCopy { get; set; }
    
            public string ErrorsInForm { get; set; }
            public string ErrorsendingForm { get; set; }
    
            public string MailSubject { get; set; }
            public string MailIntroText { get; set; }
    
            public string MailSubjectCopyToSender { get; set; }
            public string MailIntroTextCopyToSender { get; set; }
    
            public string FormSentConfirmation { get; set; }
    
            public string RedirectUrl { get; set; }
            public bool EnableSsl { get; set; }
    
            public string NameFieldName { get; set; }
            public string NameFieldError { get; set; }
            public string PhoneFieldName { get; set; }
            public string PhoneFieldError { get; set; }
            public string EmailFieldName { get; set; }
            public string EmailFieldError { get; set; }
            public string MessageFieldName { get; set; }
            public string MessageFieldError { get; set; }
            public string SendCopyFieldName { get; set; }
    
            public static string GetParamValue(dynamic input)
            {
                if (input != null && input.StartsWith("[!") && input.EndsWith("]"))
                {
                    var dictKey = input.Substring(2, input.LastIndexOf("]") - 2);
                    input = library.GetDictionaryItem(dictKey);
                }
    
                return input;
            }
        }
    
        public class MailVariables
        {
            public string Content { get; set; }
            public string Subject { get; set; }
            public string To { get; set; }
            public string ToName { get; set; }
            public string From { get; set; }
            public string FromName { get; set; }
            public string ReplyTo { get; set; }
            public bool EnableSsl { get; set; }
        }
    }
    
    
    
    
    
    
  • Anders Schmidt 76 posts 207 karma points
    Oct 12, 2013 @ 22:05
    Anders Schmidt
    0

    WUPS!!!

    Messeage just nedded in mailContent.....

                                     "{0}<br /><br /><table><tr><td valign=\"top\"><p><strong>{1}</strong></p></td><td valign=\"top\"><p>{2}</p></td></tr><tr><td valign=\"top\"><p><strong>{3}</strong></p></td><td valign=\"top\"><p>{4}</p></td></tr><tr><td valign=\"top\"><p><strong>{5}</strong></p></td><td valign=\"top\"><p>{6}</p></td></tr><tr><td valign=\"top\"><p><strong>{7}</strong></p></td><td valign=\"top\"><p>{8}</p></td></tr></table>",
    

    Again thanks for your code.

     

Please Sign in or register to post replies

Write your reply to:

Draft