Class: MailPlugger::DeliveryMethod

Inherits:
Object
  • Object
show all
Includes:
MailHelper
Defined in:
lib/mail_plugger/delivery_method.rb

Direct Known Subclasses

FakePlugger::DeliveryMethod

Constant Summary

Constants included from MailHelper

MailHelper::DELIVERY_SETTINGS_KEYS, MailHelper::SENDING_METHODS

Instance Method Summary collapse

Methods included from MailHelper

#check_version_of, #client, #default_data, #default_delivery_system_get, #delivery_data, #delivery_options, #delivery_system, #delivery_system_value_check, #exclude_delivey_settings_keys?, #extract_attachments, #extract_keys, #extract_keys_from_other_variables, #mail_field_value, #message_field_value_from, #need_delivery_system?, #option_value_from, #send_via_smtp?, #sending_method_get, #settings

Constructor Details

#initialize(options = {}) ⇒ DeliveryMethod

Initialize delivery method attributes. If we are using MailPlugger.plug_in method, then these attributes can be nil, if not then we should set these attributes.

Parameters:

  • options (Hash) (defaults to: {})

    check options below

Options Hash (options):

  • client (Class/Hash)

    e.g. DefinedApiClientClass or { ‘key’ => DefinedApiClientClass }

  • delivery_options (Array/Hash)

    e.g. [:to, :from, :subject, :body] or { ‘key’ => [:to, :from, :subject, :body] }

  • delivery_settings (Hash)

    e.g. { return_response: true }

  • default_delivery_system (String/Symbol)

    e.g. ‘defined_api’



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/mail_plugger/delivery_method.rb', line 24

def initialize(options = {})
  @client                         = options[:client] ||
                                    MailPlugger.client

  @delivery_options               = options[:delivery_options] ||
                                    MailPlugger.delivery_options

  @delivery_settings              = options[:delivery_settings] ||
                                    MailPlugger.delivery_settings

  @passed_default_delivery_system = options[:default_delivery_system] ||
                                    MailPlugger.default_delivery_system

  # -----------------------------------------------------------------------

  @default_delivery_options       = MailPlugger.default_delivery_options

  @delivery_systems               = MailPlugger.delivery_systems

  @rotatable_delivery_systems     = MailPlugger.rotatable_delivery_systems

  @sending_method                 = MailPlugger.sending_method

  # -----------------------------------------------------------------------

  @default_delivery_system        = default_delivery_system_get

  @message                        = nil
end

Instance Method Details

#deliver!(message) ⇒ Mail::Message/Hash

Using SMTP: Send message via SMTP protocol if the ‘delivery_settings’ contains a ‘smtp_settings’ key and the value is a hash with the settings.

Using API: Send message with the given client if the message parameter is a Mail::Message object. Before doing that, extract this information from the Mail::Message object which was provided in the ‘delivery_options’. After that it generates a hash with these data and sends the message with the provided client class which has a ‘deliver’ method.

Examples:


# Using SMTP:

MailPlugger.plug_in('test_smtp_client') do |smtp|
  smtp.delivery_settings = {
    smtp_settings: {
      address: 'smtp.server.com',
      port: 587,
      domain: 'test.domain.com',
      enable_starttls_auto: true,
      user_name: 'test_user',
      password: '1234',
      authentication: :plain
    }
  }
end

message = Mail.new(from: '[email protected]', to: '[email protected]',
                   subject: 'Test email', body: 'Test email body')

MailPlugger::DeliveryMethod.new.deliver!(message)

# or

message = Mail.new(from: '[email protected]', to: '[email protected]',
                   subject: 'Test email', body: 'Test email body')

MailPlugger::DeliveryMethod.new(
  delivery_settings: {
    smtp_settings: {
      address: 'smtp.server.com',
      port: 587,
      domain: 'test.domain.com',
      enable_starttls_auto: true,
      user_name: 'test_user',
      password: '1234',
      authentication: :plain
    }
  }
).deliver!(message)

# Using API:

MailPlugger.plug_in('test_api_client') do |api|
  api.client = DefinedApiClientClass
  api.delivery_options = i[from to subject body]
end

message = Mail.new(from: '[email protected]', to: '[email protected]',
                   subject: 'Test email', body: 'Test email body')

MailPlugger::DeliveryMethod.new.deliver!(message)

# or

message = Mail.new(from: '[email protected]', to: '[email protected]',
                   subject: 'Test email', body: 'Test email body')

MailPlugger::DeliveryMethod.new(
  client: DefinedApiClientClass,
  delivery_options: i[from to subject body]
).deliver!(message)

Parameters:

  • message (Mail::Message)

    what we would like to send

Returns:

  • (Mail::Message/Hash)

    depends on delivery_settings and method calls



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/mail_plugger/delivery_method.rb', line 133

def deliver!(message)
  unless message.is_a?(Mail::Message)
    raise Error::WrongParameter,
          'The given parameter is not a Mail::Message'
  end

  @message = message

  if send_via_smtp?
    message.delivery_method :smtp, settings[:smtp_settings]
    message.deliver!
  else
    client.new(delivery_data).deliver
  end
end