AspNetBoilerplate не загружает настройки из базы данных - PullRequest
0 голосов
/ 18 июня 2019

Я использую aspNetBoilerplate для отправки электронного письма (или попытки отправить электронное письмо)

Я добавил настройки в базу данных с помощью Создателя настроек по умолчанию в начальных данных, например:

namespace ESMPortal.EntityFrameworkCore.Seed.Host
{
    public class DefaultSettingsCreator
    {
        private readonly ESMPortalDbContext _context;

        public DefaultSettingsCreator(ESMPortalDbContext context)
        {
            _context = context;
        }

        public void Create()
        {
            // Emailing
            AddSettingIfNotExists(EmailSettingNames.DefaultFromAddress, "system@elite-sports-management.co.uk");
            AddSettingIfNotExists(EmailSettingNames.DefaultFromDisplayName, "Elite Sports Management");
            AddSettingIfNotExists(EmailSettingNames.Smtp.Host, "mail.x.co.uk");
            AddSettingIfNotExists(EmailSettingNames.Smtp.Password, "xxx");
            AddSettingIfNotExists(EmailSettingNames.Smtp.UserName, "system@x.co.uk");
            AddSettingIfNotExists(EmailSettingNames.Smtp.EnableSsl, "true");

            // Languages
            AddSettingIfNotExists(LocalizationSettingNames.DefaultLanguage, "en");
        }

        private void AddSettingIfNotExists(string name, string value, int? tenantId = null)
        {
            if (_context.Settings.IgnoreQueryFilters().Any(s => s.Name == name && s.TenantId == tenantId && s.UserId == null))
            {
                return;
            }

            _context.Settings.Add(new Setting(tenantId, null, name, value));
            _context.SaveChanges();
        }
    }
}

Я подтвердил, что эти настройки добавляются в базу данных при запуске проекта

Однако, когда я пытаюсь отправить электронное письмо, я получаю сообщение об ошибке, в котором говорится, что сервер 127.0.0.1:25 не отвечает. Это, очевидно, означает, что настройки в базе данных не используются.

Это еще раз подтверждается, когда я не включаю адрес отправителя при отправке электронного письма. Я получаю сообщение о том, что DefaultFromAddress является нулевым или пустым. Это не тот случай, так как я подтвердил, что он присутствует в таблице настроек базы данных.

Вот код, который я использую для отправки электронного письма. Все вышеперечисленные ошибки генерируются в секции catch оператора try

try
            {
                _emailSender.Send(
                    to: userId.EmailAddress,
                    from: "system@x.co.uk",
                    subject: "New Upload",
                    body: $"A new upload is assigned to you: <b>{upload.DisplayName}</b>",
                    isBodyHtml: true
                );
            }
            catch (Exception e)
            {

                throw;
            }

1 Ответ

0 голосов
/ 24 июня 2019

Оказывается, я не правильно добавлял настройки. Я добавил их в начальные данные, и хотя они были видны в базе данных, они не были возвращены при запросе. Добавление их через поставщика пользовательских настроек решило проблему.

namespace ESMPortal.Settings
{
    public class CustomSettingProvider : SettingProvider
    {
        public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context)
        {
            return new[]
                    {
                    new SettingDefinition(
                        "Abp.Net.Mail.Smtp.Host",
                        "mail.x.co.uk"
                        ),


                    new SettingDefinition(
                        "Abp.Net.Mail.DefaultFromAddress",
                        "x@x.co.uk",
                        scopes: SettingScopes.User,
                        clientVisibilityProvider: new VisibleSettingClientVisibilityProvider()
                        )
                        ,
                                  new SettingDefinition(
                        "Abp.Net.Mail.DefaultFromDisplayName",
                        "XXX",
                        scopes: SettingScopes.User,
                        clientVisibilityProvider: new VisibleSettingClientVisibilityProvider()
                        )
                                                                      ,
                                  new SettingDefinition(
                        "Abp.Net.Mail.Smtp.UserName",
                        "x@x.co.uk",
                        scopes: SettingScopes.User,
                        clientVisibilityProvider: new VisibleSettingClientVisibilityProvider()
                        )
                                                                                              ,
                                  new SettingDefinition(
                        "Abp.Net.Mail.Smtp.Password",
                        "XXX",
                        scopes: SettingScopes.User,
                        clientVisibilityProvider: new VisibleSettingClientVisibilityProvider()
                        )
                        //                                                                      ,
                        //          new SettingDefinition(
                        //"Abp.Net.Mail.Smtp.Domain",
                        //"x.co.uk",
                        //scopes: SettingScopes.User,
                        //clientVisibilityProvider: new VisibleSettingClientVisibilityProvider()
                        //)
                        //                                                                                              ,
                        //          new SettingDefinition(
                        //"Abp.Net.Mail.Smtp.EnableSsl",
                        //"true",
                        //scopes: SettingScopes.User,
                        //clientVisibilityProvider: new VisibleSettingClientVisibilityProvider()
                        //)
                                                                                                                                              ,
                                  new SettingDefinition(
                        "Abp.Net.Mail.Smtp.UseDefaultCredentials",
                        "false",
                        scopes: SettingScopes.User,
                        clientVisibilityProvider: new VisibleSettingClientVisibilityProvider()
                        )
                };
        }
    }
}

И это в PreInitialize () модуля

    //custom settings provider
    Configuration.Settings.Providers.Add<AppSettingProvider>();
...