2013-06-10 15:33:37 -04:00
require_dependency 'email/renderer'
2013-06-03 16:12:24 -04:00
class Admin :: EmailController < Admin :: AdminController
def index
2014-02-15 00:50:08 +01:00
data = { delivery_method : delivery_method , settings : delivery_settings }
render_json_dump ( data )
2013-06-03 16:12:24 -04:00
end
def test
params . require ( :email_address )
2014-11-19 21:19:12 +05:30
begin
Jobs :: TestEmail . new . execute ( to_address : params [ :email_address ] )
render nothing : true
rescue = > e
render json : { errors : [ e . message ] } , status : 422
end
2013-06-03 16:12:24 -04:00
end
2014-02-15 00:50:08 +01:00
def sent
email_logs = filter_email_logs ( EmailLog . sent , params )
render_serialized ( email_logs , EmailLogSerializer )
2014-02-14 13:06:21 -05:00
end
def skipped
2014-02-15 00:50:08 +01:00
email_logs = filter_email_logs ( EmailLog . skipped , params )
render_serialized ( email_logs , EmailLogSerializer )
2013-06-03 16:12:24 -04:00
end
2016-01-19 00:57:55 +01:00
def received
incoming_emails = filter_incoming_emails ( IncomingEmail , params )
render_serialized ( incoming_emails , IncomingEmailSerializer )
end
def rejected
incoming_emails = filter_incoming_emails ( IncomingEmail . errored , params )
render_serialized ( incoming_emails , IncomingEmailSerializer )
end
2013-06-03 16:12:24 -04:00
def preview_digest
params . require ( :last_seen_at )
2015-10-30 18:05:54 +00:00
params . require ( :username )
user = User . find_by_username ( params [ :username ] )
renderer = Email :: Renderer . new ( UserNotifications . digest ( user , since : params [ :last_seen_at ] ) )
2013-06-03 16:12:24 -04:00
render json : MultiJson . dump ( html_content : renderer . html , text_content : renderer . text )
end
2015-10-19 08:33:24 +11:00
def handle_mail
params . require ( :email )
Email :: Receiver . new ( params [ :email ] ) . process
render text : " email was processed "
end
2016-02-01 21:41:49 +01:00
def raw_email
params . require ( :id )
incoming_email = IncomingEmail . find ( params [ :id ] . to_i )
render json : { raw_email : incoming_email . raw }
end
2016-02-10 22:00:27 +01:00
def incoming
params . require ( :id )
incoming_email = IncomingEmail . find ( params [ :id ] . to_i )
serializer = IncomingEmailDetailsSerializer . new ( incoming_email , root : false )
render_json_dump ( serializer )
end
2013-06-11 16:00:13 -07:00
private
2014-02-15 00:50:08 +01:00
def filter_email_logs ( email_logs , params )
2016-02-16 16:35:57 +01:00
email_logs = email_logs . includes ( :user , { post : :topic } )
2016-01-19 00:57:55 +01:00
. references ( :user )
. order ( created_at : :desc )
. offset ( params [ :offset ] || 0 )
. limit ( 50 )
email_logs = email_logs . where ( " users.username ILIKE ? " , " % #{ params [ :user ] } % " ) if params [ :user ] . present?
email_logs = email_logs . where ( " email_logs.to_address ILIKE ? " , " % #{ params [ :address ] } % " ) if params [ :address ] . present?
email_logs = email_logs . where ( " email_logs.email_type ILIKE ? " , " % #{ params [ :type ] } % " ) if params [ :type ] . present?
email_logs = email_logs . where ( " email_logs.reply_key ILIKE ? " , " % #{ params [ :reply_key ] } % " ) if params [ :reply_key ] . present?
email_logs = email_logs . where ( " email_logs.skipped_reason ILIKE ? " , " % #{ params [ :skipped_reason ] } % " ) if params [ :skipped_reason ] . present?
email_logs
end
def filter_incoming_emails ( incoming_emails , params )
incoming_emails = incoming_emails . includes ( :user , { post : :topic } )
. order ( created_at : :desc )
. offset ( params [ :offset ] || 0 )
. limit ( 50 )
incoming_emails = incoming_emails . where ( " from_address ILIKE ? " , " % #{ params [ :from ] } % " ) if params [ :from ] . present?
incoming_emails = incoming_emails . where ( " to_addresses ILIKE ? OR cc_addresses ILIKE ? " , " % #{ params [ :to ] } % " ) if params [ :to ] . present?
incoming_emails = incoming_emails . where ( " subject ILIKE ? " , " % #{ params [ :subject ] } % " ) if params [ :subject ] . present?
incoming_emails = incoming_emails . where ( " error ILIKE ? " , " % #{ params [ :error ] } % " ) if params [ :error ] . present?
incoming_emails
2014-02-15 00:50:08 +01:00
end
2013-06-11 16:00:13 -07:00
def delivery_settings
action_mailer_settings
2014-08-15 03:24:55 +05:30
. reject { | k , _ | k == :password }
2013-06-11 16:00:13 -07:00
. map { | k , v | { name : k , value : v } }
end
def delivery_method
ActionMailer :: Base . delivery_method
end
def action_mailer_settings
ActionMailer :: Base . public_send " #{ delivery_method } _settings "
end
2013-06-03 16:12:24 -04:00
end