diff --git a/modules/system/lang/en/lang.php b/modules/system/lang/en/lang.php index 04708b7ccd..f94efedb31 100644 --- a/modules/system/lang/en/lang.php +++ b/modules/system/lang/en/lang.php @@ -170,6 +170,9 @@ 'search' => 'Search', ], 'mail' => [ + 'failover' => 'Failover', + 'failover_mailers' => 'Failover transports to use', + 'failover_mailers_placeholer' => 'Pick transports to use', 'log_file' => 'Log file', 'menu_label' => 'Mail configuration', 'menu_description' => 'Manage email configuration.', diff --git a/modules/system/models/MailSetting.php b/modules/system/models/MailSetting.php index 3ddb098c96..44147f69ff 100644 --- a/modules/system/models/MailSetting.php +++ b/modules/system/models/MailSetting.php @@ -13,6 +13,7 @@ class MailSetting extends Model { use \Winter\Storm\Database\Traits\Validation; + const MODE_FAILOVER = 'failover'; const MODE_LOG = 'log'; const MODE_MAIL = 'mail'; const MODE_SENDMAIL = 'sendmail'; @@ -39,6 +40,7 @@ class MailSetting extends Model * Validation rules */ public $rules = [ + 'failover_mailers' => 'required_if:send_mode,'.self::MODE_FAILOVER, 'sender_name' => 'required', 'sender_email' => 'required|email' ]; @@ -70,11 +72,18 @@ public function initSettingsData() $this->smtp_user = array_get($mailers['smtp'], 'username'); $this->smtp_password = array_get($mailers['smtp'], 'password'); $this->smtp_authorization = !!strlen($this->smtp_user); + $this->failover_mailers = implode(',', $config->get('mail.mailers.failover.mailers', [])); + } + + public function getFailoverMailersOptions() + { + return collect(App::make('config')->get('mail.mailers'))->except('failover')->keys()->all(); } public function getSendModeOptions() { return [ + static::MODE_FAILOVER => 'system::lang.mail.failover', static::MODE_LOG => 'system::lang.mail.log_file', static::MODE_MAIL => 'system::lang.mail.php_mail', static::MODE_SENDMAIL => 'system::lang.mail.sendmail', @@ -91,6 +100,10 @@ public static function applyConfigValues() $config->set('mail.from.address', $settings->sender_email); switch ($settings->send_mode) { + case self::MODE_FAILOVER: + $config->set('mail.mailers.failover.mailers', explode(',', $settings->failover_mailers)); + break; + case self::MODE_SMTP: $config->set('mail.mailers.smtp.host', $settings->smtp_address); $config->set('mail.mailers.smtp.port', $settings->smtp_port); diff --git a/modules/system/models/mailsetting/fields.yaml b/modules/system/models/mailsetting/fields.yaml index 2c18572386..e4fb5300b8 100644 --- a/modules/system/models/mailsetting/fields.yaml +++ b/modules/system/models/mailsetting/fields.yaml @@ -80,6 +80,18 @@ tabs: field: send_mode condition: value[sendmail] + failover_mailers: + label: system::lang.mail.failover_mailers + placeholder: system::lang.mail.failover_mailers_placeholer + type: taglist + options: getFailoverMailersOptions + customTags: false + tab: system::lang.mail.general + trigger: + action: show + field: send_mode + condition: value[failover] + _send_test: type: partial path: ~/modules/system/models/mailsetting/_send_test_button.php