class Mailer

Public Class Methods

send(from:, to:, password:, report:) click to toggle source
# File lib/backupper/mailer.rb, line 4
def self.send(from:, to:, password:, report:)
  options = {
    address:              'smtp.gmail.com',
    port:                 587,
    user_name:            from,
    password:             password,
    authentication:       'plain',
    enable_starttls_auto: true
  }
  Mail.defaults do
    delivery_method :smtp, options
  end
  Mail.deliver(to: to, from: from, subject: generate_subject(report), body: generate_body(report))
end

Private Class Methods

generate_body(report) click to toggle source
# File lib/backupper/mailer.rb, line 22
def generate_body(report)
  b = []
  report.each do |k, data|
    s = ''
    if data[:error]
      s << "❌ #{k}\n"
      s << '=' * 80 << "\n"
      s << "Backup FAILED!\n"
      s << "  error: #{data[:error]}\n"
    else
      s << "️✅ #{k}\n"
      s << '=' * 80 << "\n"
      s << "Backup SUCCESS!\n"
      s << "  dump size: #{data[:size]} MB\n"
      s << "  time: #{data[:time]} seconds\n"
      s << "  dump saved in: #{data[:path]}\n"
      if data[:extra_copy]
        s << "  extra copy in: #{data[:extra_copy]}\n"
      else
        s << "  no extra copy has been made\n"
      end
    end
    b << s
  end
  return "Report for backups (#{Time.now})\n\n#{b.join("\n\n")}"
end
generate_subject(report) click to toggle source
# File lib/backupper/mailer.rb, line 49
def generate_subject(report)
  errors = report.select { |_k, v| v[:error] }.size
  icon = '✅'
  icon = '⚠️' if errors > 0
  icon = '❌' if errors == report.size
  return "[Backupper] #{report.size - errors}/#{report.size} backups successfully completed #{icon}"
end