[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
A Guile action is defined as follows:
(define (function-name header body . rest) ...) |
Its arguments are:
(name . value) |
where name is the name of the header field, and value is its value with final CRLF stripped off. Both name and value are strings.
The function must return a cons whose car contains the new message
headers, and cdr contains the new message body. If the car is
#t
, it means that no headers are changed. If the cdr is
#t
, it means that the body has not changed. If the cdr is
#f
, Anubis will delete the entire message body.
As the first example, let's consider a no-operation action, i.e. an action that does not alter the message in any way. It can be written in two ways:
(define (noop-1 header body) (cons header body)) (define (noop-2 header body) (cons #t #t)) |
The following example is a function that deletes the message body and adds an additional header:
(define (proc header body) (cons (append header (cons "X-Body-Deleted" "yes")) #f)) |
Let's consider a more constructive example. The following function
checks if the Subject
header starts with string `ODP:'
(a Polish equivalent to `Re:'), and if it does, the function
replaces it with `Re:'. It always adds to the message the header
X-Processed-By: GNU Anubis |
Additionally, if the optional argument is given, it is appended to the body of the message.
(define (fix-subject hdr body . rest) "If the Subject: field starts with characters \"ODP:\", replace them with \"Re:\". If REST is not empty, append its car to BODY" (cons (append (map (lambda (x) (if (and (string-ci=? (car x) "subject") (string-ci=? (substring (cdr x) 0 4) "ODP:")) (cons (car x) (string-append "Re:" (substring (cdr x) 4))) x)) hdr) (list (cons "X-Processed-By" "GNU Anubis"))) (if (null? rest) #t (string-append body "\n" (car rest))))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |