mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
Merge pull request #4716 from discourse/bounced_emails_details
FEATURE: Allow checking the raw response of a bounced email
This commit is contained in:
@@ -2,6 +2,7 @@ import ModalFunctionality from 'discourse/mixins/modal-functionality';
|
|||||||
import IncomingEmail from 'admin/models/incoming-email';
|
import IncomingEmail from 'admin/models/incoming-email';
|
||||||
import computed from 'ember-addons/ember-computed-decorators';
|
import computed from 'ember-addons/ember-computed-decorators';
|
||||||
import { longDate } from 'discourse/lib/formatter';
|
import { longDate } from 'discourse/lib/formatter';
|
||||||
|
import { popupAjaxError } from 'discourse/lib/ajax-error';
|
||||||
|
|
||||||
export default Ember.Controller.extend(ModalFunctionality, {
|
export default Ember.Controller.extend(ModalFunctionality, {
|
||||||
|
|
||||||
@@ -12,6 +13,15 @@ export default Ember.Controller.extend(ModalFunctionality, {
|
|||||||
|
|
||||||
load(id) {
|
load(id) {
|
||||||
return IncomingEmail.find(id).then(result => this.set("model", result));
|
return IncomingEmail.find(id).then(result => this.set("model", result));
|
||||||
|
},
|
||||||
|
|
||||||
|
loadFromBounced(id) {
|
||||||
|
return IncomingEmail.findByBounced(id)
|
||||||
|
.then(result => this.set("model", result))
|
||||||
|
.catch(error => {
|
||||||
|
this.send("closeModal");
|
||||||
|
popupAjaxError(error);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ IncomingEmail.reopenClass({
|
|||||||
return ajax(`/admin/email/incoming/${id}.json`);
|
return ajax(`/admin/email/incoming/${id}.json`);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
findByBounced(id) {
|
||||||
|
return ajax(`/admin/email/incoming_from_bounced/${id}.json`);
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
findAll(filter, offset) {
|
findAll(filter, offset) {
|
||||||
filter = filter || {};
|
filter = filter || {};
|
||||||
offset = offset || 0;
|
offset = offset || 0;
|
||||||
|
|||||||
@@ -1,2 +1,14 @@
|
|||||||
|
import showModal from 'discourse/lib/show-modal';
|
||||||
import AdminEmailLogs from 'admin/routes/admin-email-logs';
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
</td>
|
</td>
|
||||||
<td><a href='mailto:{{unbound l.to_address}}'>{{l.to_address}}</a></td>
|
<td><a href='mailto:{{unbound l.to_address}}'>{{l.to_address}}</a></td>
|
||||||
<td>{{l.email_type}}</td>
|
<td><a {{action "showIncomingEmail" l.id}}>{{l.email_type}}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{{else}}
|
{{else}}
|
||||||
<tr><td colspan="4">{{i18n 'admin.email.logs.none'}}</td></tr>
|
<tr><td colspan="4">{{i18n 'admin.email.logs.none'}}</td></tr>
|
||||||
|
|||||||
@@ -88,6 +88,26 @@ class Admin::EmailController < Admin::AdminController
|
|||||||
render_json_dump(serializer)
|
render_json_dump(serializer)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def incoming_from_bounced
|
||||||
|
params.require(:id)
|
||||||
|
|
||||||
|
begin
|
||||||
|
bounced = EmailLog.find_by(id: params[:id].to_i)
|
||||||
|
raise Discourse::InvalidParameters if bounced.nil?
|
||||||
|
|
||||||
|
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)
|
||||||
|
raise Discourse::NotFound if incoming_email.nil?
|
||||||
|
|
||||||
|
serializer = IncomingEmailDetailsSerializer.new(incoming_email, root: false)
|
||||||
|
render_json_dump(serializer)
|
||||||
|
rescue => e
|
||||||
|
render json: {errors: [e.message]}, status: 404
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def filter_email_logs(email_logs, params)
|
def filter_email_logs(email_logs, params)
|
||||||
|
|||||||
@@ -150,6 +150,7 @@ Discourse::Application.routes.draw do
|
|||||||
get "rejected"
|
get "rejected"
|
||||||
get "/incoming/:id/raw" => "email#raw_email"
|
get "/incoming/:id/raw" => "email#raw_email"
|
||||||
get "/incoming/:id" => "email#incoming"
|
get "/incoming/:id" => "email#incoming"
|
||||||
|
get "/incoming_from_bounced/:id" => "email#incoming_from_bounced"
|
||||||
get "preview-digest" => "email#preview_digest"
|
get "preview-digest" => "email#preview_digest"
|
||||||
get "send-digest" => "email#send_digest"
|
get "send-digest" => "email#send_digest"
|
||||||
post "handle_mail"
|
post "handle_mail"
|
||||||
|
|||||||
Reference in New Issue
Block a user