General-Purpose Mail Filter
Message digests are specially formatted messages that contain certain number of mail messages, encapsulated using the method described in RFC 934. Such digests are often used in mailing lists to reduce the frequency of sending mails. Messages of this format are also produced by the forward function in most MUA’s.
The usual way to handle a message digest in MFL is to convert it first to a MIME message, and then to use functions for accessing its parts (see MIME functions).
Converts the message identified by the descriptor nmsg to a multi-part message. Returns a descriptor of the created message.
Optional argument flags controls the behavior of the bursting agent. It is a bitwise OR of error action and bursting flags.
Error action defines what to do if a part of the digest is
not in RFC822 message format. If it is ‘BURST_ERR_FAIL’ (the
default), the function will raise the ‘e_format’ exception. If
onerr is ‘BURST_ERR_IGNORE’, the improperly formatted part
will be ignored. Finally, the value ‘BURST_ERR_BODY’ instructs
message_burst to create a replacement part with empty headers
and the text of the offending part as its body.
Bursting flags control various aspects of the agent behavior. Currently only one flag is defined, ‘BURST_DECODE’, which instructs the agent to decode any MIME parts (according to the ‘Content-Transfer-Encoding’ header) it encounters while bursting the message.
Parts of a message digest are separated by so-called encapsulation boundaries, which are in essence lines beginning with at least one dash followed by a non-whitespace character. A dash followed by a whitespace serves as a byte-stuffing character, a sort of escape for lines which begin with a dash themselves. Unfortunately, there are mail agents which do not follow byte-stuffing rules and pass lines beginning with dashes unmodified into resulting digests. To help handle such cases a global variable is provided which controls how much dashes should the line begin with for it to be recognized as an encapsulation boundary.
Minimal number of consecutive dashes an encapsulation boundary must begin with.
The default is 2.
The following example shows a function which saves all parts of a digest message to separate disk files. The argument orig is a message descriptor. The resulting files are named by concatenating the string supplied by the stem argument and the ordinal number (1-based) of the message part.
func burst_digest(number orig, string stem) do number msg message_burst(orig) number nparts message_count_parts(msg) loop for number i 1, while i <= nparts, set i i + 1 do number part message_get_part(msg, i) number out open(sprintf('>%s%02d', stem, i)) message_to_stream(out, part) done message_close(msg) done
This document was generated on January 3, 2019 using makeinfo.Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.