Class: GovDelivery::TMS::Mail::DeliveryMethod

Inherits:
Object
  • Object
show all
Includes:
Mail::CheckDeliveryParams
Defined in:
lib/govdelivery/tms/mail/delivery_method.rb

Overview

Use TMS from the mail gem or ActionMailer as a delivery method.

# Gemfile
gem 'govdelivery-tms', :require=>'govdelivery/tms/mail/delivery_method'

# config/environment.rb
config.action_mailer.delivery_method = :govdelivery_tms
config.action_mailer.govdelivery_tms_settings = {
  :auth_token=>'auth_token',
  :api_root=>'https://stage-tms.govdelivery.com'
  }

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(values) ⇒ DeliveryMethod

Returns a new instance of DeliveryMethod.



21
22
23
# File 'lib/govdelivery/tms/mail/delivery_method.rb', line 21

def initialize(values)
  self.settings = values
end

Instance Attribute Details

#settingsObject

Returns the value of attribute settings.



25
26
27
# File 'lib/govdelivery/tms/mail/delivery_method.rb', line 25

def settings
  @settings
end

Instance Method Details

#clientObject



53
54
55
# File 'lib/govdelivery/tms/mail/delivery_method.rb', line 53

def client
  @client ||= GovDelivery::TMS::Client.new(settings[:auth_token], settings)
end

#deliver!(mail) ⇒ Object



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
# File 'lib/govdelivery/tms/mail/delivery_method.rb', line 27

def deliver!(mail)
  fail GovDelivery::TMS::Errors::NoRelation.new('email_messages', client) unless client.respond_to?(:email_messages)

  body = case
         when mail.html_part
           mail.html_part.body
         when mail.text_part
           mail.text_part.body
         else
           mail.body
         end.decoded

  message_params              = {
    subject: mail.subject,
    body:    body
  }
  message_params[:from_email] = mail.from.first unless mail.from.blank?
  message_params[:from_name]  = mail[:from].display_names.first unless mail[:from].blank?

  tms_message = client.email_messages.build(message_params)

  mail.to.each { |recip| tms_message.recipients.build(email: recip) }
  tms_message.post!
  tms_message
end