123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- class Service::System::SetEmailNotificationConfiguration < Service::Base
- # Setup Email Notification channel configuration
- #
- # @param [String] adapter sendmail or smtp
- # @param [Hash] new_configuration email server configuration, empty unless adapter is smtp
- # @option new_configuration [String] :host SMTP server address
- # @option new_configuration [String] :port SMTP server port
- # @option new_configuration [Boolean] :ssl Wether SMTP ses TLS/SSL
- # @option new_configuration [String] :user login of SMTP server
- # @option new_configuration [String] :password of SMTP server
- # @option new_configuration [Boolean] :ssl_verify Wether SSL verification is performed
- def initialize(adapter:, new_configuration:)
- super()
- @adapter = adapter
- @new_configuration = new_configuration
- end
- def execute
- # There're two instances of Email::Notification for historical easons
- # One for SMTP and one for Sendmail.
- # However, this feature is not used anywhere.
- # At some point it may be good to clean this up to simply use a single instance
- # and set adapter as needed.
- ActiveRecord::Base.transaction do
- Channel
- .where(area: 'Email::Notification')
- .each { update_single_channel(_1) }
- end
- true
- end
- private
- def update_single_channel(channel)
- is_matching_adapter = @adapter.casecmp? channel.options.dig(:outbound, :adapter)
- channel.active = is_matching_adapter
- if is_matching_adapter
- channel.options = {
- outbound: {
- adapter: @adapter,
- options: @new_configuration,
- },
- }
- channel.status_out = 'ok'
- channel.last_log_out = nil
- end
- channel.save!
- end
- end
|