62 lines
1.8 KiB
Ruby
62 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module NotificationMailers
|
|
class Base
|
|
include Diaspora::Logging
|
|
|
|
attr_accessor :recipient, :sender
|
|
|
|
delegate :unconfirmed_email, :confirm_email_token,
|
|
:first_name, to: :recipient, prefix: true
|
|
delegate :first_name, :name, :sender, to: :sender, prefix: true
|
|
|
|
def initialize(recipient_id, sender_id=nil, *args)
|
|
@headers = {}
|
|
@recipient = User.find(recipient_id)
|
|
@sender = Person.find(sender_id) if sender_id.present?
|
|
|
|
log_mail(recipient_id, sender_id, self.class.to_s.underscore)
|
|
|
|
with_recipient_locale do
|
|
set_headers(*args)
|
|
end
|
|
end
|
|
|
|
def headers
|
|
default_headers.merge(@headers)
|
|
end
|
|
|
|
def name_and_address(name, email)
|
|
address = Mail::Address.new Addressable::IDNA.to_ascii(email)
|
|
address.display_name = name
|
|
address.format
|
|
end
|
|
|
|
private
|
|
|
|
def default_headers
|
|
headers = {
|
|
from: "\"#{AppConfig.settings.pod_name}\" <#{AppConfig.mail.sender_address}>",
|
|
host: "#{AppConfig.pod_uri.host}",
|
|
to: name_and_address(@recipient.name, @recipient.email)
|
|
}
|
|
return headers if @sender.blank?
|
|
sender_in_header = @sender.profile.full_name.empty? ? @sender.username : @sender.name
|
|
headers[:from] = "\"#{AppConfig.settings.pod_name} (#{sender_in_header})\" <#{AppConfig.mail.sender_address}>"
|
|
|
|
headers
|
|
end
|
|
|
|
def with_recipient_locale(&block)
|
|
I18n.with_locale(@recipient.language, &block)
|
|
end
|
|
|
|
def log_mail(recipient_id, sender_id, type)
|
|
log_string = "event=mail mail_type=#{type} recipient_id=#{recipient_id} sender_id=#{sender_id} " \
|
|
" recipient_handle=#{@recipient.diaspora_handle}"
|
|
log_string = "#{log_string} sender_handle=#{@sender.diaspora_handle}" if sender_id.present?
|
|
|
|
logger.info log_string
|
|
end
|
|
end
|
|
end
|