class GmailMailer::Mailer

Public Class Methods

new(credentials) click to toggle source
# File lib/gmail-mailer.rb, line 13
def initialize(credentials)
  begin
    validate_credentials(credentials)
  rescue
    raise
  end
  @email_credentials = credentials
end

Public Instance Methods

send(message) click to toggle source
# File lib/gmail-mailer.rb, line 22
def send(message)
  mail = Mail.new do
    to message.to
    subject message.subject
    body message.body
  end
  if(!message.attachments.empty?)
    message.attachments.each do |attachment|
      mail.add_file(attachment)
    end
  end

  retry_attempts = 0

  begin
    send_smtp(mail)
  rescue => message
    puts "Error occured attempting to send mail => #{message}"

    raise message if(retry_attempts > MAX_RETRY)
    puts "Retry: #{retry_attempts+1}/#{MAX_RETRY+1}"
    retry_attempts = retry_attempts.succ
    retry
  end
end
send_smtp(mail) click to toggle source

Use gmail_xoauth to send email

# File lib/gmail-mailer.rb, line 49
def send_smtp(mail)
  smtp = Net::SMTP.new(SMTP_SERVER, SMTP_PORT)
  smtp.enable_starttls_auto
  secret = {
    :consumer_key => SMTP_CONSUMER_KEY, 
    :consumer_secret => SMTP_CONSUMER_SECRET,
    :token => @email_credentials[:smtp_oauth_token],
    :token_secret => @email_credentials[:smtp_oauth_token_secret]
  }
  smtp.start(SMTP_HOST, @email_credentials[:email], secret, :xoauth) do |session|
    print "Sending message..."
    session.send_message(mail.encoded, mail.from_addrs.first, mail.destinations)
    puts ".sent!"
  end
end
validate_credentials(creds) click to toggle source
# File lib/gmail-mailer.rb, line 65
def validate_credentials(creds)
  msg = "ERROR: Email credentials are invalid:"
  raise ArgumentError, "#{msg} The credentials you have posted are nil" if creds.nil?
  raise ArgumentError, "#{msg} You must provide a smtp_oauth_token value!" if !creds.key?:smtp_oauth_token or creds[:smtp_oauth_token].nil? or creds[:smtp_oauth_token].empty?
  raise ArgumentError, "#{msg} You must provide a smtp_oauth_token_secret value!" if !creds.key?:smtp_oauth_token_secret or creds[:smtp_oauth_token_secret].nil? or creds[:smtp_oauth_token_secret].empty?
  raise ArgumentError, "#{msg} You must provide an email value" if !creds.key?:email or creds[:email].nil? or creds[:email].empty?
  return nil 
end