diff options
author | Griffin Smith <grfn@gws.fyi> | 2021-04-03T17·05-0400 |
---|---|---|
committer | glittershark <grfn@gws.fyi> | 2021-04-04T14·17+0000 |
commit | 349b98ccc841587aadc6a2de5684f093cd72d628 (patch) | |
tree | c2042ae8d9411ffcb59740afa234aa10be913482 /web/panettone/src/email.lisp | |
parent | 37d573479ba56eebc5304f5209790ba7a4a3762b (diff) |
feat(panettone): Add functions to send email notifications r/2426
Add a new package to panettone, :panettone.email with functions to send email notifications to users through the SMTP relay on whitby, respecting the value of `enable_email_notifications` on the user_settings table. Change-Id: Ia4ec65965abda06f1fadb178143d66bb8eae6482 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2804 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'web/panettone/src/email.lisp')
-rw-r--r-- | web/panettone/src/email.lisp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/web/panettone/src/email.lisp b/web/panettone/src/email.lisp new file mode 100644 index 000000000000..cb01c488a2a6 --- /dev/null +++ b/web/panettone/src/email.lisp @@ -0,0 +1,48 @@ +(in-package :panettone.email) +(declaim (optimize (safety 3))) + +(defvar *smtp-server* "localhost" + "The host for SMTP connections") + +(defvar *smtp-server-port* 2525 + "The port for SMTP connections") + +(defvar *notification-from* "tvlbot@tazj.in" + "The email address to send email notifications from") + +(defvar *notification-from-display-name* "Panettone" + "The Display Name to use when sending email notifications") + +(defvar *notification-subject-prefix* "[panettone]" + "String to prefix all email subjects with") + +(defun send-email-notification (&key to subject message) + "Sends an email to TO with the given SUBJECT and MESSAGE, using the current +values of `*smtp-server*', `*smtp-server-port*' and `*email-notification-from*'" + (let ((subject (if *notification-subject-prefix* + (format nil "~A ~A" + *notification-subject-prefix* + subject) + subject))) + (cl-smtp:send-email + *smtp-server* + *notification-from* + to + subject + message + :port *smtp-server-port* + :display-name *notification-from-display-name*))) + +(defun user-has-email-notifications-enabled-p (dn) + "Returns T if the user with the given DN has enabled email notifications" + (enable-email-notifications-p (settings-for-user dn))) + +(defun notify-user (dn &key subject message) + "Sends an email notification to the user with DN with the given SUBJECT and + MESSAGE, iff that user has not disabled email notifications" + (when (user-has-email-notifications-enabled-p dn) + (when-let ((user (find-user-by-dn dn))) + (send-email-notification + :to (mail user) + :subject subject + :message message)))) |