Class: Mail::SMTPPool

Inherits:
Object
  • Object
show all
Defined in:
lib/mail/smtp_pool.rb,
lib/mail/smtp_pool/connection.rb

Defined Under Namespace

Classes: Connection

Constant Summary collapse

VERSION =
'0.1.0'
POOL_DEFAULTS =
{
  pool_size: 5,
  pool_timeout: 5
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(settings) ⇒ SMTPPool

Returns a new instance of SMTPPool.

Raises:

  • (ArgumentError)


26
27
28
29
30
# File 'lib/mail/smtp_pool.rb', line 26

def initialize(settings)
  raise ArgumentError, 'pool is required. You can create one using Mail::SMTPPool.create_pool.' if settings[:pool].nil?

  @pool = settings[:pool]
end

Class Method Details

.create_pool(settings = {}) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/mail/smtp_pool.rb', line 16

def create_pool(settings = {})
  pool_settings = POOL_DEFAULTS.merge(settings)
  smtp_settings = settings.reject { |k, v| POOL_DEFAULTS.keys.include?(k) }

  ConnectionPool.new(size: pool_settings[:pool_size], timeout: pool_settings[:pool_timeout]) do
    Mail::SMTPPool::Connection.new(smtp_settings)
  end
end

Instance Method Details

#deliver!(mail) ⇒ Object



32
33
34
# File 'lib/mail/smtp_pool.rb', line 32

def deliver!(mail)
  @pool.with { |conn| conn.deliver!(mail) }
end

#settingsObject

This makes it compatible with Mail’s ‘#deliver!` method github.com/mikel/mail/blob/22a7afc23f253319965bf9228a0a430eec94e06d/lib/mail/message.rb#L271



38
39
40
# File 'lib/mail/smtp_pool.rb', line 38

def settings
  {}
end