Class: GmailSender

Inherits:
Object
  • Object
show all
Defined in:
lib/gmail_sender.rb,
lib/gmail_sender/error.rb,
lib/gmail_sender/utils.rb,
lib/gmail_sender/message_stream_writer.rb

Defined Under Namespace

Modules: Utils Classes: Error, MessageStreamWriter

Instance Method Summary collapse

Constructor Details

#initialize(user_or_email, password, net_smtp_class = Net::SMTP, message_stream_writer_class = MessageStreamWriter) ⇒ GmailSender

Returns a new instance of GmailSender.



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/gmail_sender.rb', line 8

def initialize(user_or_email, password, net_smtp_class = Net::SMTP, message_stream_writer_class = MessageStreamWriter)
  user, domain = user_or_email.split("@")
  @sender_domain = domain || "gmail.com"
  @sender_email = "#{user}@#{@sender_domain}"
  @sender_password = password

  @net_smtp = net_smtp_class.new("smtp.gmail.com", 587)
  @net_smtp.enable_starttls

  @message_stream_writer = message_stream_writer_class.new(@sender_email)
end

Instance Method Details

#attach(file) ⇒ Object



20
21
22
# File 'lib/gmail_sender.rb', line 20

def attach(file)
  @message_stream_writer.attachments << file if File.exist?(file)
end

#send(options = {}) ⇒ Object

Raises:



24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/gmail_sender.rb', line 24

def send(options = {})
  raise(Error, "Missing receiver (:to => '[email protected]')") if Utils.blank?(options[:to])
  to = [options[:to]].flatten
  subject = options[:subject] || ""
  content = options[:content] || ""
  content_type = options[:content_type] || 'text/plain; charset=UTF-8'

  @net_smtp.start(@sender_domain, @sender_email, @sender_password, :plain) do |smtp|
    smtp.open_message_stream(@sender_email, to) do |msg_stream|
      @message_stream_writer.write(msg_stream, to, subject, content, content_type)
    end
  end
end