class CamaleonCms::HtmlMailer < ActionMailer::Base
include CamaleonCms::SiteHelper
include CamaleonCms::HooksHelper
include CamaleonCms::PluginsHelper
#include ApplicationHelper
default from: "Camaleon CMS "
after_action :set_delivery_options
# content='', from=nil, attachs=[], url_base='', current_site, template_name, layout_name, extra_data, format, cc_to
def sender(email, subject='Hello', data = {})
data = data.to_sym
if data[:current_site].present?
if data[:current_site].is_a?(Integer)
data[:current_site] = CamaleonCms::Site.find(data[:current_site]).decorate
end
else
data[:current_site] = CamaleonCms::Site.main_site.decorate
end
@current_site = data[:current_site]
data = {
cc_to: @current_site.get_option("email_cc", '').split(','),
from: @current_site.get_option("email_from") || @current_site.get_option("email"),
template_name: 'mailer',
layout_name: 'camaleon_cms/mailer',
format: 'html',
}.merge(data)
data[:cc_to] = [data[:cc_to]] if data[:cc_to].is_a?(String) || !data[:cc_to].present?
mail_data = {to: email, subject: subject}
if @current_site.get_option("mailer_enabled") == 1
mail_data[:delivery_method] = :smtp
mail_data[:delivery_method_options] = {
user_name: @current_site.get_option("email_username"),
password: @current_site.get_option("email_pass"),
address: @current_site.get_option("email_server"),
port: @current_site.get_option("email_port"),
domain: (@current_site.the_url.to_s.parse_domain rescue "localhost"),
authentication: "plain",
enable_starttls_auto: true,
}
end
mail_data[:cc] = data[:cc_to].clean_empty.join(",") if data[:cc_to].present?
mail_data[:from] = data[:from] if data[:from].present?
data[:mail_data] = mail_data
hooks_run('email_late', data)
@subject = subject
@html = data[:content]
@url_base = data[:url_base]
@extra_data = data[:extra_data]
views_dir = "app/apps/"
self.prepend_view_path(File.join($camaleon_engine_dir, views_dir).to_s)
self.prepend_view_path(Rails.root.join(views_dir).to_s)
theme = @current_site.get_theme
lookup_context.prefixes.prepend("themes/#{theme.slug}") if theme.settings["gem_mode"]
lookup_context.prefixes.prepend("themes/#{theme.slug}/views") unless theme.settings["gem_mode"]
lookup_context.use_camaleon_partial_prefixes = true
(data[:files] || data[:attachments] || []).each{ |attach|
if File.exist?(attach) && !File.directory?(attach)
attachments["#{File.basename(attach)}"] = File.open(attach, 'rb') { |f| f.read }
else
Rails.logger.error "File not attached in the mail: #{attach}"
end
}
layout = data[:layout_name].present? ? data[:layout_name] : false
if data[:template_name].present? # render email with template
mail(mail_data) { |format| format.html { render data[:template_name], layout: layout } } if data[:format] == "html"
mail(mail_data) { |format| format.text { render data[:template_name], layout: layout } } if data[:format] == "txt"
else # inline render content
mail(mail_data) { |format| format.html { render inline: @html, layout: layout } } if data[:format] == "html"
mail(mail_data) { |format| format.text { render inline: @html, layout: layout } } if data[:format] == "txt"
end
mail(mail_data) unless data[:format].present?
end
private
# set default settings configured on admin panel
def set_delivery_options
if @current_site.get_option("mailer_enabled") == 1
mail.perform_deliveries = true
end
end
end