From 40ae5a197024253c4db06ac27a1606d21414b693 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 8 May 2022 12:19:33 +0200 Subject: deliver-email: Send email data to program Allow a "sendmail" program to be configured. If set, `deliver-email` will spawn the program and write the email its standard input. We can thus send the email by invoking the external program. --- src/config.lisp | 5 +++++ src/email.lisp | 11 ++++++++++- src/main.lisp | 3 ++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/config.lisp b/src/config.lisp index 0bc6fee..b1093b6 100644 --- a/src/config.lisp +++ b/src/config.lisp @@ -14,6 +14,11 @@ :reader endpoint :documentation "Jira site URL (e.g. example.atlassian.net)") + (sendmail + :initarg :sendmail + :reader sendmail + :documentation "Email sending client command") + (email-to :initarg :email-to :reader email-to diff --git a/src/email.lisp b/src/email.lisp index 9e5929c..fe80af1 100644 --- a/src/email.lisp +++ b/src/email.lisp @@ -1,8 +1,17 @@ (in-package :wajir) (defun deliver-email (config issue) + (let ((message (with-output-to-string (message-stream) + (build-email config issue message-stream)))) + + (with-open-stream (sendmail-input (make-string-input-stream message)) + (uiop:run-program (sendmail config) + :output "/tmp/wajir.output" + :input sendmail-input)))) + +(defun build-email (config issue output-stream) (cl-smtp:write-rfc8822-message - *standard-output* + output-stream (format nil "wajir@~A" (uiop:hostname)) `(,(email-to config)) (format-subject issue) diff --git a/src/main.lisp b/src/main.lisp index 7c0f368..d700182 100644 --- a/src/main.lisp +++ b/src/main.lisp @@ -84,4 +84,5 @@ ;; 2. Send email (format t "Watching issue ~A~%" (gethash "key" issue)) - (deliver-email config issue)) + (if (sendmail config) + (deliver-email config issue))) -- cgit v1.2.3