public static string GetEmailTemplateParameter(RestCommand command, int emailTemplateParameterID)
        {
            EmailTemplateParameter emailTemplateParameter = EmailTemplateParameters.GetEmailTemplateParameter(command.LoginUser, emailTemplateParameterID);

            if (emailTemplateParameter.OrganizationID != command.Organization.OrganizationID)
            {
                throw new RestException(HttpStatusCode.Unauthorized);
            }
            return(emailTemplateParameter.GetXml("EmailTemplateParameter", true));
        }
        public async Task SendResetPasswordAsync(string email, string endpoint, string token, string culture)
        {
            var template = await GetTemplateOrFallbackToDefaultOrFailAsync(EmailTemplates.ResetPassword, culture);

            var resetPasswordUrl = $"{endpoint}?email={email}&token={token}";
            var emailMessage     = CreateMessage(email, template.Subject);

            ApplyTemplate(template.TemplateId, emailMessage,
                          EmailTemplateParameter.Create("resetPasswordUrl", resetPasswordUrl));

            Logger.Debug($"Sending {EmailTemplates.ResetPassword} email to {email} via sendgrid");
            await _sendGridClient.SendMessageAsync(emailMessage);
        }
        public async Task SendActivateAccountAsync(string email, string username,
                                                   string endpoint, string token, string culture)
        {
            var template = await GetTemplateOrFallbackToDefaultOrFailAsync(EmailTemplates.ActivateAccount, culture);

            var activateAccountUrl = $"{endpoint}?email={email}&token={token}";
            var emailMessage       = CreateMessage(email, template.Subject);

            ApplyTemplate(template.TemplateId, emailMessage,
                          EmailTemplateParameter.Create("url", activateAccountUrl),
                          EmailTemplateParameter.Create("username", username));
            Logger.Debug($"Sending {EmailTemplates.ActivateAccount} email to {email} via sendgrid");

            await _sendGridClient.SendMessageAsync(emailMessage);
        }
        public async Task SendPhotosAddedToRemarkEmailAsync(string email, Guid remarkId, string category,
                                                            string address, string culture, string url)
        {
            var template = await GetTemplateOrFallbackToDefaultOrFailAsync(EmailTemplates.PhotosAddedToRemark, culture);

            var emailMessage = CreateMessage(email, template.Subject);

            ApplyTemplate(template.TemplateId, emailMessage,
                          EmailTemplateParameter.Create("remarkId", remarkId.ToString()),
                          EmailTemplateParameter.Create("category", category),
                          EmailTemplateParameter.Create("address", address),
                          EmailTemplateParameter.Create("url", url));

            await _sendGridClient.SendMessageAsync(emailMessage);
        }
        public async Task SendRemarkStateChangedAsync(string email, Guid remarkId, string category, string address, string username,
                                                      DateTime date, string culture, string url, string state)
        {
            var template = await GetTemplateOrFallbackToDefaultOrFailAsync(EmailTemplates.RemarkStateChanged, culture);

            var emailMessage = CreateMessage(email, template.Subject);

            ApplyTemplate(template.TemplateId, emailMessage,
                          EmailTemplateParameter.Create("remarkId", remarkId.ToString()),
                          EmailTemplateParameter.Create("category", category),
                          EmailTemplateParameter.Create("address", address),
                          EmailTemplateParameter.Create("username", username),
                          EmailTemplateParameter.Create("date", GetDateTimeString(date, culture)),
                          EmailTemplateParameter.Create("state", state),
                          EmailTemplateParameter.Create("url", url));

            Logger.Debug($"Sending {EmailTemplates.RemarkStateChanged} email to {email} via sendgrid");
            await _sendGridClient.SendMessageAsync(emailMessage);
        }