diff --git a/doc/d-utils.md b/doc/d-utils.md index 7e8532f..bf70f2b 100644 --- a/doc/d-utils.md +++ b/doc/d-utils.md @@ -405,3 +405,35 @@ quoted-printable sequences. Returns the ```str``` with all characters converted to upper case using ```char-upcase```. Does not work with UTF-8. + +## util-mail [module] + + (import util-mail) + +A simple wrapper module to send emails from UNIX system. + +### *mailto-override* [parameter] + + (define *mailto-override* (make-parameter #f)) + (*mailto-override*) + (*mailto-override* email) + +* ```email``` - email address string + +If this parameter is non-```#f```, all outgoing emails are actually +sent to the address stored within. + +### send-mail [procedure] + + (send-mail body-lines + #:from (from #f) + #:to to + #:subject subject) + +* ```body-lines``` - lines of the email +* ```from``` - email address from string +* ```to``` - email address to string +* ```subject``` - email subject string + +Sends email using mail(1) command. The arguments ```#:to``` and +```#:subject``` are mandatory. Argument ```#:from``` is optional. diff --git a/doc/utils.md b/doc/utils.md index 52a657d..881bf7c 100644 --- a/doc/utils.md +++ b/doc/utils.md @@ -125,29 +125,6 @@ Returns ```#t``` if both dictionaries contain the same keys and their values are equal according to the provided ```equality?``` predicate which defaults to ```equal?```. -### Mail - - (import util-mail) - -A simple wrapper module to send emails from UNIX system. - - (*mailto-override* [email]) - -* ```email``` - email address string - -If this parameter is non-```#f```, all outgoing emails are actually -sent to the address stored within. - - (send-mail body-lines [#:from from] [#:to to] [#:subject subject]) - -* ```body-lines``` - lines of the email -* ```from``` - email address from string -* ```to``` - email address to string -* ```subject``` - email subject string - -Sends email using mail(1) command. The arguments ```#:to``` and -```#:subject``` are mandatory. Argument ```#:from``` is optional. - ### Set (List) (import util-set-list) diff --git a/src/Makefile b/src/Makefile index 8e3d315..8485499 100644 --- a/src/Makefile +++ b/src/Makefile @@ -330,7 +330,8 @@ util-proc.o: util-proc.import.scm util-proc.import.scm: $(UTIL-PROC-SOURCES) UTIL-MAIL-SOURCES=util-mail.scm util-io.import.scm \ - util-string.import.scm util-utf8.import.scm + util-string.import.scm util-utf8.import.scm \ + racket-kwargs.import.scm duck.import.scm util-mail.o: util-mail.import.scm util-mail.import.scm: $(UTIL-MAIL-SOURCES) diff --git a/src/gendoc.scm b/src/gendoc.scm index 77bba1d..07f904a 100644 --- a/src/gendoc.scm +++ b/src/gendoc.scm @@ -31,4 +31,5 @@ util-format util-tag util-string + util-mail ) diff --git a/src/util-mail.scm b/src/util-mail.scm index 99bcb68..aa9ff92 100644 --- a/src/util-mail.scm +++ b/src/util-mail.scm @@ -25,8 +25,11 @@ (declare (unit util-mail)) -(module +(import duck) + +(module* util-mail + #:doc ("A simple wrapper module to send emails from UNIX system.") ( *mailto-override* send-mail @@ -38,10 +41,17 @@ (chicken string) util-io util-utf8 - util-string) + util-string + racket-kwargs) ;; All emails go to this override - (define *mailto-override* (make-parameter #f)) + (define/doc *mailto-override* + ("* ```email``` - email address string + +If this parameter is non-```#f```, all outgoing emails are actually +sent to the address stored within.") + email + (make-parameter #f)) ;; Ensures the subject has proper encoding (define (encode-subject subj) @@ -52,27 +62,30 @@ subj)) ;; Sends an email using the UNIX mail(1) utility. - (define (send-mail body-lines . args) - (let ((from (get-keyword #:from args)) - (to (get-keyword #:to args)) - (subject (get-keyword #:subject args))) - (when (not to) - (error 'send-mail "requires #:to argument")) - (when (not subject) - (error 'send-mail "requires #:subject argument")) - (let* ((tos (if (list? to) - to - (list to))) - (real-tos (if (*mailto-override*) - (list (*mailto-override*)) - tos))) - (apply process-send/recv - "mail" - (append (if from - (list "-r" from) - '()) - (list "-s" (encode-subject subject)) - real-tos) - body-lines)))) + (define*/doc (send-mail body-lines + #:from (from #f) + #:to to + #:subject subject) + ("* ```body-lines``` - lines of the email +* ```from``` - email address from string +* ```to``` - email address to string +* ```subject``` - email subject string + +Sends email using mail(1) command. The arguments ```#:to``` and +```#:subject``` are mandatory. Argument ```#:from``` is optional.") + (let* ((tos (if (list? to) + to + (list to))) + (real-tos (if (*mailto-override*) + (list (*mailto-override*)) + tos))) + (apply process-send/recv + "mail" + (append (if from + (list "-r" from) + '()) + (list "-s" (encode-subject subject)) + real-tos) + body-lines))) )