private (string, string, string) GetTemplate(EmailTemplateChoices templateName)
        {
            string subject   = "";
            string html      = "";
            string plainText = "";

            switch (templateName)
            {
            case EmailTemplateChoices.ConfirmAccount:
                var confirmAccountTemplates = new ConfirmAccountTemplates();
                subject   = confirmAccountTemplates.Subject;
                html      = confirmAccountTemplates.Html;
                plainText = confirmAccountTemplates.PlainText;
                break;

            case EmailTemplateChoices.ForgotPassword:
                var forgotPasswordTemplates = new ForgotPasswordTemplates();
                subject   = forgotPasswordTemplates.Subject;
                html      = forgotPasswordTemplates.Html;
                plainText = forgotPasswordTemplates.PlainText;
                break;

            case EmailTemplateChoices.NewAccount:
                var newAccountTemplates = new NewAccountTemplates();
                subject   = newAccountTemplates.Subject;
                html      = newAccountTemplates.Html;
                plainText = newAccountTemplates.PlainText;
                break;

            default:
                throw new Exception("Email template not found");
            }

            return(subject, html, plainText);
        }
        public (string, string, string) BuildEmailSubjectAndBody(EmailTemplateChoices templateName, object parameters = null)
        {
            var(subject, html, plainText) = GetTemplate(templateName);

            if (parameters == null)
            {
                return(subject, html, plainText);
            }

            var htmlString      = BuildTemplate(html, parameters);
            var plainTextString = BuildTemplate(plainText, parameters);

            return(subject, htmlString, plainTextString);
        }