mirror of
https://github.com/discourse/discourse.git
synced 2025-04-03 05:39:41 +08:00
FEATURE: send digest preview to an email address
This commit is contained in:
parent
b8c88dbfe0
commit
47aa3d94aa
@ -1,7 +1,12 @@
|
|||||||
import EmailPreview from 'admin/models/email-preview';
|
import EmailPreview from 'admin/models/email-preview';
|
||||||
|
import { popupAjaxError } from 'discourse/lib/ajax-error';
|
||||||
|
|
||||||
export default Ember.Controller.extend({
|
export default Ember.Controller.extend({
|
||||||
|
|
||||||
|
emailEmpty: Em.computed.empty('email'),
|
||||||
|
sendEmailDisabled: Em.computed.or('emailEmpty', 'sendingEmail'),
|
||||||
|
showSendEmailForm: Em.computed.notEmpty('model.html_content'),
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
refresh() {
|
refresh() {
|
||||||
const model = this.get('model');
|
const model = this.get('model');
|
||||||
@ -15,6 +20,23 @@ export default Ember.Controller.extend({
|
|||||||
|
|
||||||
toggleShowHtml() {
|
toggleShowHtml() {
|
||||||
this.toggleProperty('showHtml');
|
this.toggleProperty('showHtml');
|
||||||
|
},
|
||||||
|
|
||||||
|
sendEmail() {
|
||||||
|
this.set('sendingEmail', true);
|
||||||
|
this.set('sentEmail', false);
|
||||||
|
|
||||||
|
const self = this;
|
||||||
|
|
||||||
|
EmailPreview.sendDigest(this.get('lastSeen'), this.get('username'), this.get('email')).then(result => {
|
||||||
|
if (result.errors) {
|
||||||
|
bootbox.alert(result.errors);
|
||||||
|
} else {
|
||||||
|
self.set('sentEmail', true);
|
||||||
|
}
|
||||||
|
}).catch(popupAjaxError).finally(function() {
|
||||||
|
self.set('sendingEmail', false);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,20 @@ EmailPreview.reopenClass({
|
|||||||
}).then(function (result) {
|
}).then(function (result) {
|
||||||
return EmailPreview.create(result);
|
return EmailPreview.create(result);
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
sendDigest: function(lastSeenAt, username, email) {
|
||||||
|
if (Em.isEmpty(lastSeenAt)) {
|
||||||
|
lastSeenAt = moment().subtract(7, 'days').format('YYYY-MM-DD');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Em.isEmpty(username)) {
|
||||||
|
username = Discourse.User.current().username;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ajax("/admin/email/send-digest.json", {
|
||||||
|
data: { last_seen_at: lastSeenAt, username: username, email: email }
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -19,6 +19,24 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#conditional-loading-spinner condition=loading}}
|
{{#conditional-loading-spinner condition=loading}}
|
||||||
|
|
||||||
|
{{#if showSendEmailForm}}
|
||||||
|
<br/>
|
||||||
|
<div>
|
||||||
|
{{#if sendingEmail}}
|
||||||
|
{{i18n 'admin.email.sending_test'}}
|
||||||
|
{{else}}
|
||||||
|
<label style="display: inline;">{{i18n 'admin.email.send_digest_label'}}</label>
|
||||||
|
{{text-field value=email placeholderKey="admin.email.test_email_address"}}
|
||||||
|
<button class='btn' {{action "sendEmail"}} disabled={{sendEmailDisabled}}>{{i18n 'admin.email.send_digest'}}</button>
|
||||||
|
{{#if sentEmail}}
|
||||||
|
<span class='result-message'>{{i18n 'admin.email.sent_test'}}</span>
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
<br/>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{#if showHtml}}
|
{{#if showHtml}}
|
||||||
{{{model.html_content}}}
|
{{{model.html_content}}}
|
||||||
{{else}}
|
{{else}}
|
||||||
|
@ -50,6 +50,25 @@ class Admin::EmailController < Admin::AdminController
|
|||||||
render json: MultiJson.dump(html_content: renderer.html, text_content: renderer.text)
|
render json: MultiJson.dump(html_content: renderer.html, text_content: renderer.text)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def send_digest
|
||||||
|
params.require(:last_seen_at)
|
||||||
|
params.require(:username)
|
||||||
|
params.require(:email)
|
||||||
|
user = User.find_by_username(params[:username])
|
||||||
|
message, skip_reason = UserNotifications.send(:digest, user, {since: params[:last_seen_at]})
|
||||||
|
if message
|
||||||
|
message.to = params[:email]
|
||||||
|
begin
|
||||||
|
Email::Sender.new(message, :digest).send
|
||||||
|
render nothing: true
|
||||||
|
rescue => e
|
||||||
|
render json: {errors: [e.message]}, status: 422
|
||||||
|
end
|
||||||
|
else
|
||||||
|
render json: {errors: skip_reason}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def handle_mail
|
def handle_mail
|
||||||
params.require(:email)
|
params.require(:email)
|
||||||
Email::Processor.process!(params[:email])
|
Email::Processor.process!(params[:email])
|
||||||
|
@ -2762,6 +2762,9 @@ en:
|
|||||||
delivery_method: "Delivery Method"
|
delivery_method: "Delivery Method"
|
||||||
preview_digest_desc: "Preview the content of the digest emails sent to inactive users."
|
preview_digest_desc: "Preview the content of the digest emails sent to inactive users."
|
||||||
refresh: "Refresh"
|
refresh: "Refresh"
|
||||||
|
send_digest_label: "Send this result to:"
|
||||||
|
send_digest: "Send"
|
||||||
|
sending_email: "Sending email..."
|
||||||
format: "Format"
|
format: "Format"
|
||||||
html: "html"
|
html: "html"
|
||||||
text: "text"
|
text: "text"
|
||||||
|
@ -151,6 +151,7 @@ Discourse::Application.routes.draw do
|
|||||||
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 "preview-digest" => "email#preview_digest"
|
get "preview-digest" => "email#preview_digest"
|
||||||
|
get "send-digest" => "email#send_digest"
|
||||||
post "handle_mail"
|
post "handle_mail"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user