From de13e48aa5763818e324b8e7fa3ee0bbd4d994ca Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Fri, 19 May 2023 17:16:19 -0500 Subject: [PATCH] Expose basic way to send test email most of the mechanics of sending email could already be tested by sending a "preview" email of any type, or e.g. via Feedback. but it seemed like the Configure Email Settings page should have a dedicated way to test sending --- .../templates/settings/email/configure.mako | 74 +++++++++++++++---- tailbone/views/email.py | 26 +++++++ 2 files changed, 84 insertions(+), 16 deletions(-) diff --git a/tailbone/templates/settings/email/configure.mako b/tailbone/templates/settings/email/configure.mako index 13bceb3e..f0e5d4d9 100644 --- a/tailbone/templates/settings/email/configure.mako +++ b/tailbone/templates/settings/email/configure.mako @@ -26,30 +26,72 @@ - % if request.has_perm('errors.bogus'): -

Testing

-
+

Testing

+
- -

- You can raise a "bogus" error to test if/how it generates email: -

+ + + + + + {{ sendingTest ? "Working, please wait..." : "Send Test Email" }} + + + +
+
+
+

You can raise a "bogus" error to test if/how that generates email:

+
+
+ :disabled="raisingBogusError" + % else: + disabled + title="your permissions do not allow this" + % endif + > + % if request.has_perm('errors.bogus'): {{ raisingBogusError ? "Working, please wait..." : "Raise Bogus Error" }} + % else: + Raise Bogus Error + % endif - - +
- - % endif +
+ +
<%def name="modify_this_page_vars()"> ${parent.modify_this_page_vars()} - % if request.has_perm('errors.bogus'): - - % endif + % endif + diff --git a/tailbone/views/email.py b/tailbone/views/email.py index 536bf6ed..428e8484 100644 --- a/tailbone/views/email.py +++ b/tailbone/views/email.py @@ -297,6 +297,22 @@ class EmailSettingView(MasterView): 'true' if data['hidden'] else 'false') return {'ok': True} + def send_test(self): + """ + AJAX view for sending a test email. + """ + data = self.request.json_body + + recip = data.get('recipient') + if not recip: + return {'error': "Must specify recipient"} + + app = self.get_rattail_app() + app.send_email('hello', to=[recip], cc=None, bcc=None, + default_subject="Hello world") + + return {'ok': True} + @classmethod def defaults(cls, config): cls._email_defaults(config) @@ -318,6 +334,16 @@ class EmailSettingView(MasterView): permission='{}.configure'.format(permission_prefix), renderer='json') + # send test + config.add_route('{}.send_test'.format(route_prefix), + '{}/send-test'.format(url_prefix), + request_method='POST') + config.add_view(cls, attr='send_test', + route_name='{}.send_test'.format(route_prefix), + permission='{}.configure'.format(permission_prefix), + renderer='json') + + # TODO: deprecate / remove this ProfilesView = EmailSettingView