Class: PostmailRuby::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/postmail_ruby/configuration.rb

Overview

Configuration holds all settings loaded from environment variables or via configuration block. It provides helpers to build SMTP settings and determine if default Rails SMTP configuration should be disabled.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/postmail_ruby/configuration.rb', line 33

def initialize
  # set defaults from environment variables
  @delivery_method = (ENV['POSTMAIL_DELIVERY_METHOD'] || 'smtp').downcase.to_sym
  @disable_default_smtp = truthy?(ENV['POSTMAIL_DISABLE_RAILS_SMTP'])

  @api_endpoint = ENV['POSTMAIL_API_ENDPOINT'] || 'https://postal.exanora.com/api/v1/send/message'
  @api_key      = ENV['POSTMAIL_API_KEY']

  @smtp_host    = ENV['POSTMAIL_SMTP_HOST'] || 'localhost'
  @smtp_port    = integer_or_nil(ENV['POSTMAIL_SMTP_PORT']) || 25
  @smtp_username = ENV['POSTMAIL_SMTP_USERNAME']
  @smtp_password = ENV['POSTMAIL_SMTP_PASSWORD']
  @smtp_authentication = (ENV['POSTMAIL_SMTP_AUTH'] || 'login').downcase.to_sym
  @smtp_enable_starttls_auto = truthy?(ENV['POSTMAIL_SMTP_ENABLE_STARTTLS_AUTO'])
  # If not explicitly set, enable_starttls_auto defaults to true unless SSL is enabled
  @smtp_enable_starttls_auto = !truthy?(ENV['POSTMAIL_SMTP_SSL']) if @smtp_enable_starttls_auto.nil?
  @smtp_ssl    = truthy?(ENV['POSTMAIL_SMTP_SSL'])
  @smtp_domain = ENV['POSTMAIL_SMTP_DOMAIN']
end

Instance Attribute Details

#api_endpointObject

API endpoint for HTTP delivery



13
14
15
# File 'lib/postmail_ruby/configuration.rb', line 13

def api_endpoint
  @api_endpoint
end

#api_keyObject

API key for HTTP delivery (used in X-Server-API-Key header)



15
16
17
# File 'lib/postmail_ruby/configuration.rb', line 15

def api_key
  @api_key
end

#delivery_methodObject

Delivery method to use (:smtp or :api)



11
12
13
# File 'lib/postmail_ruby/configuration.rb', line 11

def delivery_method
  @delivery_method
end

#smtp_authenticationObject

SMTP authentication type (:plain, :login, etc.)



25
26
27
# File 'lib/postmail_ruby/configuration.rb', line 25

def smtp_authentication
  @smtp_authentication
end

#smtp_domainObject

Domain used for SMTP



31
32
33
# File 'lib/postmail_ruby/configuration.rb', line 31

def smtp_domain
  @smtp_domain
end

#smtp_enable_starttls_autoObject

Enable STARTTLS for SMTP (boolean)



27
28
29
# File 'lib/postmail_ruby/configuration.rb', line 27

def smtp_enable_starttls_auto
  @smtp_enable_starttls_auto
end

#smtp_hostObject

SMTP host



17
18
19
# File 'lib/postmail_ruby/configuration.rb', line 17

def smtp_host
  @smtp_host
end

#smtp_passwordObject

SMTP password



23
24
25
# File 'lib/postmail_ruby/configuration.rb', line 23

def smtp_password
  @smtp_password
end

#smtp_portObject

SMTP port (integer)



19
20
21
# File 'lib/postmail_ruby/configuration.rb', line 19

def smtp_port
  @smtp_port
end

#smtp_sslObject

Use SSL/TLS implicit connection for SMTP (boolean)



29
30
31
# File 'lib/postmail_ruby/configuration.rb', line 29

def smtp_ssl
  @smtp_ssl
end

#smtp_usernameObject

SMTP username



21
22
23
# File 'lib/postmail_ruby/configuration.rb', line 21

def smtp_username
  @smtp_username
end

Instance Method Details

#disable_default_smtp?Boolean

Returns true if the default Rails SMTP configuration should be disabled. When this is true, PostmailRuby will clear ‘config.action_mailer.smtp_settings`.

Returns:

  • (Boolean)


55
56
57
# File 'lib/postmail_ruby/configuration.rb', line 55

def disable_default_smtp?
  @disable_default_smtp
end

#smtp_settingsObject

Compose SMTP settings hash suitable for Mail::SMTP or ActionMailer.



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/postmail_ruby/configuration.rb', line 60

def smtp_settings
  settings = {
    address: smtp_host, port: smtp_port,
    user_name: smtp_username, password: smtp_password,
    authentication: smtp_authentication,
    enable_starttls_auto: smtp_enable_starttls_auto, ssl: smtp_ssl
  }
  settings[:domain] = smtp_domain if smtp_domain
  # Remove nil values to avoid overriding defaults
  settings.compact
end