class Mailthis::OutgoingEmail

Constants

ADDRESS_FIELDS
REQUIRED_FIELDS

deliver a message using using Net::SMTP with TLS encryption it is recommended to use Mail (github.com/mikel/mail) messages to disable delivery, set `ENV = 'yes'`

Attributes

mailer[R]
message[R]

Public Class Methods

new(mailer, message) click to toggle source
# File lib/mailthis/outgoing_email.rb, line 18
def initialize(mailer, message)
  raise Mailthis::MessageError, "invalid message" if !valid_message?(message)

  @mailer, @message = mailer, message
  @message.from     ||= @mailer.from
  @message.reply_to ||= @message.from
end

Public Instance Methods

deliver() click to toggle source
# File lib/mailthis/outgoing_email.rb, line 48
def deliver
  self.deliver_dry_run do |msg|
    deliver_smtp(msg) if ENV['MAILTHIS_DISABLE_SEND'].nil?
  end
end
deliver_dry_run() { |message| ... } click to toggle source
# File lib/mailthis/outgoing_email.rb, line 38
def deliver_dry_run
  self.validate!
  @mailer.validate!

  yield(self.message) if block_given?

  log_message(self.message)
  self.message
end
validate!() click to toggle source
# File lib/mailthis/outgoing_email.rb, line 26
def validate!
  REQUIRED_FIELDS.each do |field|
    if !field_present?(@message, field)
      raise Mailthis::MessageError, "missing `#{field}` field"
    end
  end

  if !fields_present?(@message, ADDRESS_FIELDS)
    raise Mailthis::MessageError, "no #{ADDRESS_FIELDS.join('/')} specified"
  end
end

Private Instance Methods

debug_log_entry(msg) click to toggle source
# File lib/mailthis/outgoing_email.rb, line 92
def debug_log_entry(msg)
  "\n"\
  "==============================================================\n"\
  "#{msg}\n"\
  "==============================================================\n"
end
deliver_smtp(msg) click to toggle source
# File lib/mailthis/outgoing_email.rb, line 68
def deliver_smtp(msg)
  smtp_start_args = [
    @mailer.smtp_server,
    @mailer.smtp_port,
    @mailer.smtp_helo,
    @mailer.smtp_user,
    @mailer.smtp_pw,
    @mailer.smtp_auth
  ]

  Net::SMTP.start(*smtp_start_args) do |smtp|
    ADDRESS_FIELDS.each do |field|
      if (recipients = msg.send(field))
        recipients.each{ |r| smtp.send_message(msg.to_s, msg.from, r) }
      end
    end
  end
end
field_present?(message, field) click to toggle source
# File lib/mailthis/outgoing_email.rb, line 64
def field_present?(message, field)
  !message.send(field).nil? && !message.send(field).empty?
end
fields_present?(message, fields) click to toggle source
# File lib/mailthis/outgoing_email.rb, line 60
def fields_present?(message, fields)
  fields.inject(false){ |present, f| present || field_present?(message, f) }
end
log(msg, level = nil) click to toggle source
# File lib/mailthis/outgoing_email.rb, line 99
def log(msg, level = nil)
  @mailer.logger.send(level || :info, msg)
end
log_message(msg) click to toggle source
# File lib/mailthis/outgoing_email.rb, line 87
def log_message(msg)
  log "Sent '#{msg.subject}' to #{msg.to ? msg.to.join(', ') : "''"}"
  log debug_log_entry(msg), :debug
end
valid_message?(message) click to toggle source
# File lib/mailthis/outgoing_email.rb, line 56
def valid_message?(message)
  message.kind_of?(Mailthis::Message)
end