class MessagebusActionMailerClient

Public Instance Methods

deliver(message) click to toggle source

used by ActionMailer

# File lib/messagebus-sdk/actionmailer_client.rb, line 20
def deliver(message)
  deliver!(message)
end
deliver!(message) click to toggle source
# File lib/messagebus-sdk/actionmailer_client.rb, line 24
def deliver!(message)
  #minimum required headers
  if message.to.nil? ||  message.to.first.nil? || message.subject.nil? || message.from.first.nil?  || message.return_path.nil? then
    raise "Messagebus API error=Missing required header: :toEmail => #{message.to} :subject => #{message.subject} :fromEmail => #{message.from.first}"
  end

  message_from_email = from_email_with_name(message.header[:from].to_s)

  from_name = ""
  from_email = message.from.first
  if !message_from_email.nil?
    from_name = message_from_email[1]
  end

  if !well_formed_address?(from_email)
    raise "Messagebus API error=From Address is invalid :toEmail => #{message.to.first} :subject => #{message.subject} :fromEmail => #{message.from.first}"
  end

  custom_headers = {}

  custom_headers["bcc"] = message.bcc[0] if !message.bcc.nil? && message.bcc.length != 0

  session_key = DEFAULT
  message.header.fields.each do |f|
    if f.name == HEADER_SESSION_KEY
      session_key = f.value.to_s
    else
      if f.name =~ /x-.*/i
        custom_headers[f.name] = f.value.to_s
      end
    end
  end

  msg = {
    :toEmail => message.to.first,
    :toName => "",
    :subject => message.subject,
    :fromEmail => from_email,
    :fromName => from_name,
    :returnPath => message.return_path,
    :sessionKey => session_key,
    :customHeaders => custom_headers
  }

  msg[:plaintextBody] = ( message.body ) ? "#{message.body}" : "No plaintext version was supplied."

  if message.multipart?
    msg[:plaintextBody] = (message.text_part) ? message.text_part.body.to_s : "No plaintext version was supplied."
    msg[:htmlBody] = message.html_part.body.to_s if message.html_part
  end

  begin
    send_messages([msg])
  rescue => message_bus_api_error
    raise "Messagebus API error=#{message_bus_api_error}, message=#{msg.inspect}"
  end

end

Private Instance Methods

from_email_with_name(address) click to toggle source
# File lib/messagebus-sdk/actionmailer_client.rb, line 84
def from_email_with_name(address)
  address.match(/^(.*)\s<(.*?)>/)
end