class SendcloudMailer::Base

Attributes

settings[RW]

Public Class Methods

new(settings) click to toggle source
# File lib/sendcloud-mailer/base.rb, line 7
def initialize(settings)
  self.settings = settings
end

Public Instance Methods

deliver!(mail) click to toggle source
# File lib/sendcloud-mailer/base.rb, line 11
def deliver!(mail)
  @mail = mail

  params = {
    :apiUser => settings[:api_user],
    :apiKey => settings[:api_key],
    :from => from,
    :to => to,
    :cc => cc,
    :bcc => bcc,
    :subject => mail.subject,
    :html => html,
    :plain => plain,
    :attachments => attachments,
    :labelId => label_id
  }
  params.delete_if { |k, v| v.nil? }

  result = RestClient.post( 'http://api.sendcloud.net/apiv2/mail/send', params )
  json = JSON.parse(result.force_encoding('UTF-8'))
  error(json) unless json["result"]
  unless @file.nil?
    File.unlink(@file.path) rescue nil
  end
end

Private Instance Methods

addresses(name) click to toggle source
# File lib/sendcloud-mailer/base.rb, line 59
def addresses(name)
  result = @mail.header.fields.find { |f| f.name == name }
  unless result.nil?
    addresses = result.address_list.addresses
    addresses.join(';')
  end
end
attachments() click to toggle source
# File lib/sendcloud-mailer/base.rb, line 75
def attachments
  return nil if @mail.attachments.length == 0

  @mail.attachments.each do | attachment |
    filename = attachment.filename
    # sendcloud api can only single file
    @file = File.new(File.join(Dir.tmpdir, filename), 'w+b')
    @file.write(attachment.body.decoded)
    return @file
  end
end
bcc() click to toggle source
# File lib/sendcloud-mailer/base.rb, line 55
def bcc
  addresses 'Bcc'
end
cc() click to toggle source
# File lib/sendcloud-mailer/base.rb, line 51
def cc
  addresses 'Cc'
end
error(message) click to toggle source
# File lib/sendcloud-mailer/base.rb, line 39
def error(message)
  ActionMailer::Base.logger.error(message) unless ActionMailer::Base.logger.nil?
end
from() click to toggle source
# File lib/sendcloud-mailer/base.rb, line 43
def from
  @mail.header.fields.find{|f| f.name == "From"}.value 
end
html() click to toggle source
# File lib/sendcloud-mailer/base.rb, line 67
def html
  @mail.html_part ? @mail.html_part.body.decoded : nil
end
label_id() click to toggle source
# File lib/sendcloud-mailer/base.rb, line 87
def label_id
  @mail.header.fields.find { |f| f.name == 'label-id' }.try :value
end
plain() click to toggle source
# File lib/sendcloud-mailer/base.rb, line 71
def plain
  @mail.multipart? ? (@mail.text_part ? @mail.text_part.body.decoded : nil) : @mail.body.decoded
end
to() click to toggle source
# File lib/sendcloud-mailer/base.rb, line 47
def to
  addresses 'To'
end