Commit a3519f84 a3519f8454a5e24d36ccac06a4da2b5b88a66232 by Wojciech Polak

Update docs.

* doc/texinfo/programs.texi: Update maidag scripting info.
1 parent 9813be45
...@@ -5195,15 +5195,15 @@ node. Thus, @command{maidag} supersedes both @command{mail.local} and ...@@ -5195,15 +5195,15 @@ node. Thus, @command{maidag} supersedes both @command{mail.local} and
5195 @command{mail.remote} utilities from GNU Mailutils versions prior to 5195 @command{mail.remote} utilities from GNU Mailutils versions prior to
5196 2.0. 5196 2.0.
5197 5197
5198 @command{Maidag} is also able to process incoming messages using Sieve 5198 @command{Maidag} is also able to process incoming messages using
5199 or Scheme scripts and, based on results of this processing, to take a decision 5199 Sieve, Scheme or Python scripts and, based on results of this
5200 on whether to actually deliver and where to deliver them. Due to its 5200 processing, to take a decision on whether to actually deliver and
5201 extensive scripting facilities, @command{maidag} offers much more 5201 where to deliver them. Due to its extensive scripting facilities,
5202 flexibility than other popular @acronym{MDA}s, such as 5202 @command{maidag} offers much more flexibility than other popular
5203 @command{procmail}. 5203 @acronym{MDA}s, such as @command{procmail}.
5204 5204
5205 @menu 5205 @menu
5206 * Sendmail-maidag:: Using @command{maidag} with Sendmail. 5206 * Sendmail-maidag:: Using @command{maidag} with Sendmail.
5207 * Exim-maidag:: Using @command{maidag} with Exim. 5207 * Exim-maidag:: Using @command{maidag} with Exim.
5208 * MeTA1-maidag:: Using @command{maidag} with MeTA1. 5208 * MeTA1-maidag:: Using @command{maidag} with MeTA1.
5209 * Mailbox Quotas:: 5209 * Mailbox Quotas::
...@@ -5473,19 +5473,11 @@ the following languages: ...@@ -5473,19 +5473,11 @@ the following languages:
5473 @xref{Sieve Language}. 5473 @xref{Sieve Language}.
5474 5474
5475 @item Scheme 5475 @item Scheme
5476 @item Python
5476 @end itemize 5477 @end itemize
5477 5478
5478 @menu 5479 Mail filters to use are specified using @samp{script} configuration
5479 * Sieve Maidag Filters:: 5480 statement. The following meta-symbols can be used in its argument:
5480 * Scheme Maidag Filters::
5481 @end menu
5482
5483 @node Sieve Maidag Filters
5484 @subsubsection Sieve Maidag Filters
5485 @kwindex sieve-filter
5486 The file name of the Sieve filter to use is specified using
5487 @samp{sieve-filter} configuration statement. The following
5488 meta-symbols can be used in its argument:
5489 5481
5490 @table @asis 5482 @table @asis
5491 @item ~ 5483 @item ~
...@@ -5496,10 +5488,30 @@ Expands to the recipient home directory. ...@@ -5496,10 +5488,30 @@ Expands to the recipient home directory.
5496 Expands to the recipient user name. 5488 Expands to the recipient user name.
5497 @end table 5489 @end table
5498 5490
5499 For example, the following configuration statement: 5491 By default, a filename extension decide which scripting language will
5492 be used. User can alter the choice using @samp{language} configuration
5493 statement. For example:
5500 5494
5501 @smallexample 5495 @smallexample
5502 sieve-filter "~/.maidag.sv" 5496 language "python"
5497 script "~/.maidag-py-filter"
5498 @end smallexample
5499
5500 @menu
5501 * Sieve Maidag Filters::
5502 * Scheme Maidag Filters::
5503 * Python Maidag Filters::
5504 @end menu
5505
5506 @node Sieve Maidag Filters
5507 @subsubsection Sieve Maidag Filters
5508 @kwindex script
5509 The file name of the Sieve filter to use is specified using
5510 @samp{script} configuration statement. For example, the following
5511 configuration statement:
5512
5513 @smallexample
5514 script "~/.maidag.sv"
5503 @end smallexample 5515 @end smallexample
5504 5516
5505 @noindent 5517 @noindent
...@@ -5518,14 +5530,66 @@ Sieve code will be visible in the delivered message. ...@@ -5518,14 +5530,66 @@ Sieve code will be visible in the delivered message.
5518 5530
5519 @node Scheme Maidag Filters 5531 @node Scheme Maidag Filters
5520 @subsubsection Scheme Maidag Filters 5532 @subsubsection Scheme Maidag Filters
5521 @kwindex guile-filter 5533 @kwindex script
5522 The file name of the Scheme mail filter is specified using 5534 The file name of the Scheme mail filter is specified using
5523 @samp{guile-filter} configuration statement. This statement is 5535 @samp{script} configuration statement. For example, the following
5524 processed as described in @ref{Sieve Maidag Filters}. 5536 configuration statement:
5537
5538 @smallexample
5539 script "~/.maidag.scm"
5540 @end smallexample
5541
5542 @noindent
5543 instructs `maidag' to use file `.maidag.scm' in the recipient home
5544 directory as a Scheme filter.
5545
5546 @node Python Maidag Filters
5547 @subsubsection Python Maidag Filters
5548 @kwindex script
5525 5549
5526 Only one of @code{guile-filter} or @code{sieve-filter} may be 5550 The file name of the Python mail filter is specified using
5527 used. The behavior of @command{maidag} if both statements are used is 5551 @samp{script} configuration statement. For example, the following
5528 undefined. 5552 configuration statement:
5553
5554 @smallexample
5555 script "~/.maidag.py"
5556 @end smallexample
5557
5558 @noindent
5559 instructs `maidag' to use file `.maidag.py' in the recipient home
5560 directory as a Python filter.
5561
5562 @noindent
5563 A simple example of a mail filter written in Python:
5564
5565 @smallexample
5566 from mailutils import *
5567 import maidag
5568 import re
5569
5570 msg = message.Message (maidag.message)
5571 hdr = msg.header
5572
5573 try:
5574 if 'List-Post' in hdr and 'Received' in hdr \
5575 and hdr['Received'].find ('fencepost.gnu.org') != -1:
5576
5577 # check envelope's sender address
5578 m = re.search (r'([\w\-]+)-bounces\+([\w]+)=.*',
5579 msg.envelope.get_sender ())
5580 if m:
5581 lbox = m.group (1)
5582 user = m.group (2)
5583 # open destination mailbox and append message
5584 dst = mailbox.MailboxDefault ('~/Mail/%s' % lbox)
5585 dst.open ('ac')
5586 dst.append_message (msg)
5587 dst.close ()
5588 # set deleted flag so maidag will not deliver msg elsewhere
5589 msg.attribute.set_deleted ()
5590 except Exception:
5591 pass
5592 @end smallexample
5529 5593
5530 @node Forwarding 5594 @node Forwarding
5531 @subsection Forwarding 5595 @subsection Forwarding
......