(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)) (user-mail (mail user))) (send-email-notification :to user-mail :subject subject :message message))))