diff --git a/app/assets/javascripts/admin/controllers/modals/admin-incoming-email.js.es6 b/app/assets/javascripts/admin/controllers/modals/admin-incoming-email.js.es6 index bc9cd2edd8d..ca2d44e2510 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-incoming-email.js.es6 +++ b/app/assets/javascripts/admin/controllers/modals/admin-incoming-email.js.es6 @@ -12,6 +12,10 @@ export default Ember.Controller.extend(ModalFunctionality, { load(id) { return IncomingEmail.find(id).then(result => this.set("model", result)); + }, + + loadFromBounced(id) { + return IncomingEmail.findByBounced(id).then(result => this.set("model", result)); } }); diff --git a/app/assets/javascripts/admin/models/incoming-email.js.es6 b/app/assets/javascripts/admin/models/incoming-email.js.es6 index d0386b2bc46..470c3fa56f0 100644 --- a/app/assets/javascripts/admin/models/incoming-email.js.es6 +++ b/app/assets/javascripts/admin/models/incoming-email.js.es6 @@ -19,6 +19,11 @@ IncomingEmail.reopenClass({ return ajax(`/admin/email/incoming/${id}.json`); }, + findByBounced(id) { + return ajax(`/admin/email/incoming_from_bounced/${id}.json`); + }, + + findAll(filter, offset) { filter = filter || {}; offset = offset || 0; diff --git a/app/assets/javascripts/admin/routes/admin-email-bounced.js.es6 b/app/assets/javascripts/admin/routes/admin-email-bounced.js.es6 index 027a6c0f302..40dbc5a75f8 100644 --- a/app/assets/javascripts/admin/routes/admin-email-bounced.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-email-bounced.js.es6 @@ -1,2 +1,14 @@ +import showModal from 'discourse/lib/show-modal'; import AdminEmailLogs from 'admin/routes/admin-email-logs'; -export default AdminEmailLogs.extend({ status: "bounced" }); + +export default AdminEmailLogs.extend({ + status: "bounced", + + actions: { + showIncomingEmail(id) { + showModal('admin-incoming-email', { admin: true }); + this.controllerFor("modals/admin-incoming-email").loadFromBounced(id); + } + } + +}); diff --git a/app/assets/javascripts/admin/templates/email-bounced.hbs b/app/assets/javascripts/admin/templates/email-bounced.hbs index e2df9e04bf4..9ebbb7d3166 100644 --- a/app/assets/javascripts/admin/templates/email-bounced.hbs +++ b/app/assets/javascripts/admin/templates/email-bounced.hbs @@ -28,7 +28,7 @@ {{/if}} {{l.to_address}} - {{l.email_type}} + {{l.email_type}} {{else}} {{i18n 'admin.email.logs.none'}} diff --git a/app/controllers/admin/email_controller.rb b/app/controllers/admin/email_controller.rb index 2d7798e6c2f..8e6c3b53b0e 100644 --- a/app/controllers/admin/email_controller.rb +++ b/app/controllers/admin/email_controller.rb @@ -88,6 +88,18 @@ class Admin::EmailController < Admin::AdminController render_json_dump(serializer) end + def incoming_from_bounced + params.require(:id) + + bounced = EmailLog.find(params[:id].to_i) + email_local_part, email_domain = SiteSetting.notification_email.split('@') + bounced_to_address = "#{email_local_part}+verp-#{bounced.bounce_key}@#{email_domain}" + + incoming_email = IncomingEmail.find_by(to_addresses: bounced_to_address) + serializer = IncomingEmailDetailsSerializer.new(incoming_email, root: false) + render_json_dump(serializer) + end + private def filter_email_logs(email_logs, params) diff --git a/config/routes.rb b/config/routes.rb index 3f1a5be6c72..8485de68755 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -150,6 +150,7 @@ Discourse::Application.routes.draw do get "rejected" get "/incoming/:id/raw" => "email#raw_email" get "/incoming/:id" => "email#incoming" + get "/incoming_from_bounced/:id" => "email#incoming_from_bounced" get "preview-digest" => "email#preview_digest" get "send-digest" => "email#send_digest" post "handle_mail"