Dynamic subject in contact mail
===

I am working on a simple contact system where i need to display a value from a querystring in the subject field of the sent email.

Today has been a slow descent into madness as this has failed to work in every way i have tried.

I am using Umbraco 4.7.2 with Ubootstrap (bootstrap by twitter) and modifying the contact form found within.
Below is the cshtml of my contact form macro

    @using System.Text
    @using System.Collections.Generic;
    @using Bootstrap.Logic.Utils
    @using umbraco.MacroEngines
    @inherits DynamicNodeContext
    @{
        dynamic form = Context.Request.Form.ToDynamic();
    
        if (IsPost)
        {
            if (!Context.IsValidAntiForgery()) { ModelState.AddFormError(@Dictionary.InvalidPost); }
            if (MainHelper.IsEmpty(form.Name)) { ModelState.AddError("name", @Dictionary.FormNameValidation); }
            if (!MainHelper.IsEmail(form.Email)) { ModelState.AddError("email", @Dictionary.FormEmailValidation); }
            if (MainHelper.IsEmpty(form.Enquiry)) { ModelState.AddError("enquiry", @Dictionary.FormCommentValidation); }
        }
    
        if (!IsPost || !ModelState.IsValid)
        {
        @Html.Raw(library.RemoveFirstParagraphTag(Model.FormText.ToString()))
        <form method="post" action="@Model.Url">
            <fieldset>
                <legend>@Parameter.subject </legend>
                <div class="clearfix @Library.If(!ModelState.IsValidField("name"), "error")">
                @Html.Label(@Dictionary.FormName, "name")
                <div class="input">@Html.TextBox("name", form.Name, new { @class = "xlarge" })
                @if (!ModelState.IsValidField("name"))
                { <span class="help-inline">@string.Join(". ", @ModelState["name"].Errors)</span> }
                </div>
                </div>
                <div class="clearfix">
                @Html.Label(@Dictionary.AddressName, "address1")
                <div class="input">@Html.TextBox("address1", form.Address1, new { @class = "xlarge" })</div>
                </div>
                <div class="clearfix">
                @Html.Label("Add 2", "address2", new { @class = "hide" })
                <div class="input">@Html.TextBox("address2", form.Address2, new { @class = "xlarge" })</div>
                </div>
                <div class="clearfix @Library.If(!ModelState.IsValidField("email"), "error")">
                @Html.Label(@Dictionary.FormEmail, "email")
                <div class="input">@Html.TextBox("email", form.Email, new { @type = "email", @class = "xlarge" })
                @if (!ModelState.IsValidField("email"))
                { <span class="help-inline">@string.Join(". ", @ModelState["email"].Errors)</span> }
                </div>
                </div>
                <div class="clearfix @Library.If(!ModelState.IsValidField("name"), "error")">
                @Html.Label(@Dictionary.FormComment, "enquiry")
                <div class="input">@Html.TextArea("enquiry", form.Enquiry, new { @rows = 5, @cols = 25, @class = "xlarge" })
                @if (!ModelState.IsValidField("enquiry"))
                { <span class="help-inline">@string.Join(". ", @ModelState["enquiry"].Errors)</span> }
                </div>
                </div>
                @Context.GetAntiForgeryHtml()
            </fieldset>
            <div class="actions">
                <button id="SubmitForm" type="submit" class="btn">@Dictionary.Send</button>  
            </div>
        </form>
        @Html.ValidationSummary(@Dictionary.FormValidationSummary, new { @class = "alert-message block-message error" })
        }
        else
        {
            var ok = SendForm(form);
            if (!ok)
            {
                <div id="errorMailSettings">
                    @Model.ErrorMessage
                </div>
            }
            else
            {
                // Set Thankyou text from our contact node
                <div id="thankYou">
                    <h2>@Model.ThankYouHeaderText</h2>
                    @Model.ThankYouMessageText
                </div>
            }
        }
    }
    
    @functions 
    {
        public bool SendForm(dynamic form)
        {
            // Get the variables from the form and set them in strings
            string strName = Library.StripHtml(form.Name).ToString();
            string strAddressLine1 = Library.StripHtml(form.Address1).ToString();
            string strAddressLine2 = Library.StripHtml(form.Address2).ToString();
            string strEmailFrom = Library.StripHtml(form.Email).ToString();
            string strMessage = Library.StripHtml(form.Enquiry).ToString();
    
            // Lets set the values passed in from the Macro
            string strEmailTo = Model.EmailTo.ToString();
            string strEmailSubject = @Parameter.subject;
         
            var now = DateTime.Now;
            var strTime = String.Format("{0:HH:mm:ss}", now);
            var strDate = String.Format("{0:dd/MM/yyyy}", now);
            
            // Let's Replace the placeholders in the email message body
            var strEmailBody = new StringBuilder(Model.EmailBody.ToString());
            strEmailBody.Replace("[Name]", strName); // Find and Replace [Name]
            strEmailBody.Replace("[AddressLine1]", strAddressLine1); // Find and Replace [AddressLine1]
            strEmailBody.Replace("[AddressLine2]", strAddressLine2); // Find and Replace [AddressLine2]
            strEmailBody.Replace("[Email]", strEmailFrom); // Find and Replace [Email]
            strEmailBody.Replace("[Message]", strMessage); // Find and Replace [Message]
            strEmailBody.Replace("[Time]", strTime); // Find and Replace [Time]
            strEmailBody.Replace("[Date]", strDate); // Find and Replace [Date]
    
            // Now the email is sent out to the owner, lets send out an email
            // to let the user know we have recieved their email & will respond shortly
            string strEmailReplySubject = Model.EmailReplySubject.ToString();
            var strEmailReplyBody = new StringBuilder(Model.EmailReplyBody.ToString());
            strEmailReplyBody.Replace("[Name]", strName); // Find and Replace [Name]
            
            return MainHelper.TrySendMail(strEmailTo, strEmailSubject, strEmailBody.ToString()) && MainHelper.TrySendMail(strEmailFrom, strEmailReplySubject, strEmailReplyBody.ToString());
        }
    }

(Wall of code i know but i figure more info is better than less)

This results in the display of the querystring from macro parameter via @Parameter.subjet in the legend field, but when i try further down in the send function to set the string strEmailSubject to @Parameter.subject i just get the empty field in the email.

Any help would be wonderful.