Commit 75e3a3eb 75e3a3ebde7a363bf65e6c51a179508a3a1b3e62 by Sergey Poznyakoff

Updated

1 parent f1cbdaab
2002-12-14 Sergey Poznyakoff
* mail/previous.c: Skip deleted messages
* mail/next: Likewise.
* auth/sql.c (mu_auth_sql_by_uid): Fixed typo.
* include/mailutils/libsieve.h: Changed type of `number'
to size_t.
* libsieve/sieve.y (union): Likewise
* include/mailutils/mu_auth.h: Removed duplicate declaration
of mu_auth_data_free.
* libsieve/actions.c (build_mime): To improve readability,
output additional newline before reporting the reason.
* libsieve/sieve.l: Allow backslashes in quoted strings.
* sieve/testsuite/Reject: Updated
* doc/texinfo/libmu_scm.texi: New file. Documents libmu_scm
library.
* doc/texinfo/Makefile.am: Added libmu_scm.texi
* doc/texinfo/libmuauth.texi: Updated
* doc/texinfo/libsieve.texi: Updated
* doc/texinfo/mailutils.texi: Updated
* doc/texinfo/programs.texi: Updated
* doc/texinfo/imap4.texi: Updated
* doc/texinfo/mailer.texi: Updated
* TODO: Updated
* mh/TODO: New file
* NEWS: Updated
2002-12-13 Sergey Poznyakoff
* mail.local/mail.local.h: Create temporary mailbox instead of
......
......@@ -10,6 +10,10 @@ Version 0.2:
to disable support for any protocol or mailbox format to reduce
the size of the library.
* Added new utility mailutils-config. This utility prints gcc command
line options needed for compiling and linknig an application against
mailutils.
* libsieve: New library. Supports Sieve language as described in
RFC 3028 and provides a mechanism for dynamic loading of
user-defined actions, tests and comparators.
......
......@@ -115,14 +115,34 @@ IMPORTANT:
+ support AUTH=anonymous (imap://cyrus.andrew.cmu.edu/archive.info-cyrus)
[libmuauth]
- First argument to mu_auth_fp (and second one to mu_auth_runlist) should
be struct mu_auth_data ** instead of void *.
[examples]
- unify the mbox-* and mimetest examples with messages, it would be nice
to have a general purpose tool
[mh]
- see mh/TODO
[sieve]
+ need to deal with the envelope addressing issues
- Implement boolean shortcut evaluation for `allof' and `anyof'
- Extend the `text:' token. The planned syntax is:
text:[-][delimiter]
The meaning of optional flags is the same as in shell "here document"
construct: '-' strips all leading tab characters from the string body,
thus allowing it to be indented in a natural fashion; 'delimiter'
introduces the new end-of-text delimiter instead of the default
dot. If 'delimiter' starts with a backslash, no preprocessing will
be performed within a string.
- uid isn't good to identify messages, use message-id?
......
......@@ -10,8 +10,8 @@
Internet Message Access Protocol - Version (4rev1). In IMAP4, the client
must be prepared to accept any responses at all times. The server responses
have three forms: status reponses, server data and command continuation
request. Untaged responses, for hitorical reasons are also call
have three forms: status responses, server data and command continuation
request. Untagged responses, for historical reasons are also call
"unsolicited responses".
@subsection Commands
......
......@@ -24,7 +24,7 @@ The API is still changing.
@deftypefun int mailer_send_message (mailer_t @var{mailer}, message_t @var{msg}, address_t @var{from}, address_t @var{to});
If from is not @var{NULL}, it must containg a single fully qualified
If from is not @var{NULL}, it must contain a single fully qualified
RFC2822 email address which will be used as the envelope from
address. This is the address to which delivery status notifications
are sent, so it never matters what it is set to until it REALLY matters.
......@@ -101,7 +101,7 @@ Some possible use cases the API must support are:
2 - mailer_deliver(mailer, msg, address_t( "<>" ), to)
Don't want mail loops, so the nul but valid SMTP address of <> is
Don't want mail loops, so the null but valid SMTP address of <> is
the envelope from.
@subheading The sendmail mailer.
......
......@@ -118,10 +118,10 @@ Mailutils.
@end ifinfo
@menu
* Introduction:: GNU Mailutils
@comment * Concrete API:: Concrete API.
* Framework:: Framework.
* Authentication Library:: Auxiliary library for authenticating users.
* Sieve Library:: GNU implementation of Sieve mail filtering.
* libmailbox:: Main library
* libmuauth:: Auxiliary library for authenticating users.
* libmu_scm:: Interface with Guile
* libsieve:: GNU implementation of Sieve mail filtering.
* Programs:: Programs.
* Reporting Bugs:: How to report a bug.
* News:: Where to get information about @sc{gnu} Mailutils
......@@ -134,7 +134,7 @@ Indices
@end menu
@node Introduction, Framework, Top, Top
@node Introduction, libmailbox, Top, Top
@comment node-name, next, previous, up
@chapter Introduction
@cindex Introduction
......@@ -257,34 +257,34 @@ Notifications}
@end itemize
@comment @node Concrete API, Framework, Introduction, Top
@comment @comment node-name, next, previous, up
@comment @chapter Concrete API
@comment @cindex Concrete API
@comment @include c-api.texi
@node Framework, Authentication Library, Introduction, Top
@node libmailbox, libmuauth, Introduction, Top
@comment node-name, next, previous, up
@chapter Framework
@cindex Framework
@include framework.texi
@node Authentication Library, Sieve Library, Framework, Top
@node libmuauth, libmu_scm, libmailbox, Top
@chapter Authentication Library
@cindex Authentication Library
@cindex libmuauth
@include libmuauth.texi
@node Sieve Library, Programs, Authentication Library, Top
@node libmu_scm, libsieve, libmuauth, Top
@chapter Mailutils to Scheme interface
@cindex Scheme
@cindex libmu_scm
@include libmu_scm.texi
@node libsieve, Programs, libmu_scm, Top
@chapter Sieve Library
@cindex Sieve Library
@cindex libsieve
@include libsieve.texi
@node Programs, Reporting Bugs, Sieve Library, Top
@node Programs, Reporting Bugs, libsieve, Top
@comment node-name, next, previous, up
@chapter Programs
@cindex Programs
......
......@@ -310,7 +310,7 @@ of seconds.
@cindex :auth
These options control the authorization and authentication module
lists. For a description of auhtentication concepts, refer to
lists. For a description of authentication concepts, refer to
@xref{authentication}.
@table @option
......@@ -351,7 +351,7 @@ The hashed value of the user password is retrieved from the @acronym{sql}
database using query supplied by @option{--sql-getpass} option
(see below).
@item pam
The user is authenicated via pluggable authentication module
The user is authenticated via pluggable authentication module
(@acronym{pam}). The @acronym{pam} service name to be used is
configured via @option{--pam-service} option (see below)
@end table
......@@ -455,7 +455,7 @@ be run either as a standalone program or from @file{inetd.conf} file.
@sc{gnu} imap4d supports a notion of @dfn{namespaces} defined in RFC 2342. A
namespace is a set of directories upon which the user has certain
permissions. It should be understood that these persmissions apply
permissions. It should be understood that these permissions apply
only if the underlying filesystem allows them.
The three namespaces supported by @command{imap4d} are:
......@@ -1306,7 +1306,7 @@ Prints out the messages from @var{msglist}. The variable @code{crt}
determines the minimum number of lines the body of the message must
contain in order to be piped through pager command specified
by environment variable @code{PAGER}. If @code{crt} is set to a numeric
value, this value is taken as the mininmum number of lines. Otherwise,
value, this value is taken as the minimum number of lines. Otherwise,
if @code{crt} is set without a value then the height of the terminal
screen is used to compute the threshold. The number of lines on
screen is controlled by @code{screen} variable.
......@@ -2028,7 +2028,7 @@ Enable network protocol traces (MU_DEBUG_PROT)
Enable sieve trace (MU_SIEVE_DEBUG_TRACE)
@item l
Enble sieve action logs
Enable sieve action logs
@end table
The digits in the range @samp{0} -- @samp{9} used in @var{flags} set
......@@ -2209,7 +2209,7 @@ by default only the first one is presented.
@item -d
@itemx --debug
Display mailbox debuging information.
Display mailbox debugging information.
@item -f @var{MAILBOX}
@itemx --folder=@var{MAILBOX}
......@@ -2513,7 +2513,6 @@ The program uses following option groups: @xref{mailbox}.
* Specifying Mailboxes to Operate Upon::
* Passing Options to Scheme::
* Guimb Invocation Summary::
* Scheme Procedures and Variables::
@end menu
@node Specifying Scheme Program to Execute
......@@ -2596,7 +2595,7 @@ lines to the beginning of your script to allow for its immediate execution:
@noindent
(replace @samp{/usr/local/bin/} with the actual path to the @command{guimb}).
Otherwise, if you use @option{--file} or @option{--expression} oprions,
Otherwise, if you use @option{--file} or @option{--expression} options,
the additional arguments may be passed to the Scheme program @option{-g}
(@option{--guile-arg}) command line option. For example:
......@@ -2656,213 +2655,6 @@ Display help message.
Display program version.
@end table
@node Scheme Procedures and Variables
@subsection Scheme Procedures and Variables
@menu
* Address Functions::
* Mailbox Functions::
* Message Functions::
* MIME Functions::
* Log Functions::
@end menu
@node Address Functions
@subsubsection Address Functions
@deffn Function mu-address-get-personal ADDRESS NUM
Return personal part of an email address.
@end deffn
@deffn Function mu-address-get-comments ADDRESS NUM
@end deffn
@deffn Function mu-address-get-email ADDRESS NUM
Return email part of an email address.
@end deffn
@deffn Function mu-address-get-domain ADDRESS NUM
Return domain part of an email address
@end deffn
@deffn Function mu-address-get-local ADDRESS NUM
Return local part of an email address.
@end deffn
@deffn Function mu-address-get-count ADDRESS
Return number of parts in email address.
@end deffn
@node Mailbox Functions
@subsubsection Mailbox Functions
@deffn Function mu-mailbox-open URL MODE
Opens a mailbox specified by URL.
@end deffn
@deffn Function mu-mailbox-close MBOX
Closes mailbox MBOX
@end deffn
@deffn Function mu-mailbox-get-url MBOX
Returns the URL of the mailbox.
@end deffn
@deffn Function mu-mailbox-get-port MBOX MODE
Returns a port associated with the contents of the MBOX.
MODE is a string defining operation mode of the stream. It may
contain any of the two characters: @samp{r} for reading, @samp{w} for
writing.
@end deffn
@deffn Function mu-mailbox-get-message MBOX MSGNO
Retrieve from MBOX message # MSGNO.
@end deffn
@deffn Function mu-mailbox-messages-count MBOX
Returns number of messages in the mailbox.
@end deffn
@deffn Function mu-mailbox-expunge MBOX
Expunges deleted messages from the mailbox.
@end deffn
@deffn Function mu-mailbox-url MBOX
Returns the URL of the mailbox
@end deffn
@deffn Function mu-mailbox-append-message MBOX MESG
Appends the message to the mailbox
@end deffn
@node Message Functions
@subsubsection Message Functions
@deffn Function mu-message-copy MESG
Creates the copy of the given message.
@end deffn
@deffn Function mu-message-set-header MESG HEADER VALUE REPLACE
Sets new VALUE to the header HEADER of the message MESG.
If the HEADER is already present in the message its value
is replaced with the supplied one if the optional REPLACE is
#t. Otherwise new header is created and appended.
@end deffn
@deffn Function mu-message-get-size MESG
Returns the size of the given message.
@end deffn
@deffn Function mu-message-get-lines MESG
Returns number of lines in the given message.
@end deffn
@deffn Function mu-message-get-sender MESG
Returns the sender email address for the message MESG.
@end deffn
@deffn Function mu-message-get-header MESG HEADER
Returns the header value of the HEADER in the MESG.
@end deffn
@deffn Function mu-message-get-header-fields MESG HEADERS
Returns the list of headers in the MESG. If optional HEADERS is
specified it should be a list of header names to restrict return
value to.
@end deffn
@deffn Function mu-message-set-header-fields MESG LIST REPLACE
Set the headers in the message MESG from LIST
LIST is a list of (cons HEADER VALUE)
Optional parameter REPLACE specifies whether the new header
values should replace the headers already present in the
message.
@end deffn
@deffn Function mu-message-delete MESG FLAG
Mark given message as deleted. Optional FLAG allows to toggle deleted mark
The message is deleted if it is #t and undeleted if it is #f
@end deffn
@deffn Function mu-message-get-flag MESG FLAG
Return value of the attribute FLAG.
@end deffn
@deffn Function mu-message-set-flag MESG FLAG VALUE
Set the given attribute of the message. If optional VALUE is #f, the
attribute is unset.
@end deffn
@deffn Function mu-message-get-user-flag MESG FLAG
Returns value of the user attribute FLAG.
@end deffn
@deffn Function mu-message-set-user-flag MESG FLAG VALUE
Set the given user attribute of the message. If optional VALUE is
#f, the attribute is unset.
@end deffn
@deffn Function mu-message-get-port MESG MODE FULL
Returns a port associated with the given MESG. MODE is a string
defining operation mode of the stream. It may contain any of the
two characters: @samp{r} for reading, @samp{w} for writing.
If optional FULL argument specified, it should be a boolean value.
If it is #t then the returned port will allow access to any
part of the message (including headers). If it is #f then the port
accesses only the message body (the default).
@end deffn
@deffn Function mu-message-get-body MESG
Returns the message body for the message MESG.
@end deffn
@deffn Function mu-message-send MESG MAILER
Sends the message MESG. Optional MAILER overrides default
mailer settings in mu-mailer.
@end deffn
@node MIME Functions
@subsubsection MIME Functions
@deffn Function mu-mime-create FLAGS MESG
Creates a new MIME object.
@end deffn
@deffn Function mu-mime-multipart? MIME
Returns #t if MIME is a multipart object.
@end deffn
@deffn Function mu-mime-get-num-parts MIME
Returns number of parts in a MIME object.
@end deffn
@deffn Function mu-mime-get-part MIME PART
Returns part number PART from a MIME object.
@end deffn
@deffn Function mu-mime-add-part MIME MESG
Adds MESG to the MIME object.
@end deffn
@deffn Function mu-mime-get-message MIME
Converts MIME object to a message.
@end deffn
@node Log Functions
@subsubsection Log Functions
@deffn Function mu-openlog IDENT OPTION FACILITY
Opens a connection to the system logger for Guile program.
@end deffn
@deffn Function mu-logger PRIO TEXT
Generates a log message to be distributed via syslogd.
@end deffn
@deffn Function mu-closelog
Closes the channel to the system logger open by mu-openlog.
@end deffn
@page
@node comsatd
......
......@@ -44,45 +44,44 @@ ENVELOPE TO: <coyote@desert.example.org>
11: I don't want to read these messages.
12:
13: Regards.
14: .
15:
-re
16: [0-9:=-]+
17: Content-Type: message/delivery-status
18:
-re
19: Reporting-UA: sieve; GNU Mailutils [0-9][0-9.]*
-re
20: Arrival-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
21: Final-Recipient: RFC822; foobar@nonexistent.net
22: Action: deleted
23: Disposition: automatic-action/MDN-sent-automatically;deleted
-re
24: Last-Attempt-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
25:
-re
26: [0-9:=-]+
27: Content-Type: message/rfc822
28:
29: From: coyote@desert.example.org
30: To: roadrunner@acme.example.com
31: Subject: I have a present for you
32: X-Caffeine: C8H10N4O2
33:
34: Look, I'm sorry about the whole anvil thing, and I really
35: didn't mean to try and drop it on you from the top of the
36: cliff. I want to try to make it up to you. I've got some
37: great birdseed over here at my place--top of the line
38: stuff--and if you come by, I'll have it all wrapped up
39: for you. I'm really sorry for all the problems I've caused
40: for you over the years, but I know we can work this out.
41:
42: --
43: Wile E. Coyote "Super Genius" coyote@desert.example.org
44:
-re
45: [0-9:=-]+
46:
14:
-re
15: [0-9:=-]+
16: Content-Type: message/delivery-status
17:
-re
18: Reporting-UA: sieve; GNU Mailutils [0-9][0-9.]*
-re
19: Arrival-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
20: Final-Recipient: RFC822; foobar@nonexistent.net
21: Action: deleted
22: Disposition: automatic-action/MDN-sent-automatically;deleted
-re
23: Last-Attempt-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
24:
-re
25: [0-9:=-]+
26: Content-Type: message/rfc822
27:
28: From: coyote@desert.example.org
29: To: roadrunner@acme.example.com
30: Subject: I have a present for you
31: X-Caffeine: C8H10N4O2
32:
33: Look, I'm sorry about the whole anvil thing, and I really
34: didn't mean to try and drop it on you from the top of the
35: cliff. I want to try to make it up to you. I've got some
36: great birdseed over here at my place--top of the line
37: stuff--and if you come by, I'll have it all wrapped up
38: for you. I'm really sorry for all the problems I've caused
39: for you over the years, but I know we can work this out.
40:
41: --
42: Wile E. Coyote "Super Genius" coyote@desert.example.org
43:
-re
44: [0-9:=-]+
45:
END OF MESSAGE
ENVELOPE FROM: MAILER-DAEMON@nonexistent.net
ENVELOPE TO: <b1ff@de.res.example.com>
......@@ -104,43 +103,42 @@ ENVELOPE TO: <b1ff@de.res.example.com>
11: I don't want to read these messages.
12:
13: Regards.
14: .
15:
-re
16: [0-9:=-]+
17: Content-Type: message/delivery-status
18:
-re
19: Reporting-UA: sieve; GNU Mailutils [0-9][0-9.]*
-re
20: Arrival-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
21: Final-Recipient: RFC822; foobar@nonexistent.net
22: Action: deleted
23: Disposition: automatic-action/MDN-sent-automatically;deleted
-re
24: Last-Attempt-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
25:
-re
26: [0-9:=-]+
27: Content-Type: message/rfc822
28:
29: From: youcouldberich!@reply-by-postal-mail.invalid
30: To: rube@landru.example.edu
31: Subject: $$$ YOU, TOO, CAN BE A MILLIONAIRE! $$$
32: Date: TBD
33: X-Number: 0015
34:
35: YOU MAY HAVE ALREADY WON TEN MILLION DOLLARS, BUT I DOUBT
36: IT! SO JUST POST THIS TO SIX HUNDRED NEWSGROUPS! IT WILL
37: GUARANTEE THAT YOU GET AT LEAST FIVE RESPONSES WITH MONEY!
38: MONEY! MONEY! COLD HARD CASH! YOU WILL RECEIVE OVER
39: $20,000 IN LESS THAN TWO MONTHS! AND IT'S LEGAL!!!!!!!!!
40: !!!!!!!!!!!!!!!!!!111111111!!!!!!!11111111111!!1 JUST
41: SEND $5 IN SMALL, UNMARKED BILLS TO THE ADDRESSES BELOW!
42:
-re
43: [0-9:=-]+
44:
14:
-re
15: [0-9:=-]+
16: Content-Type: message/delivery-status
17:
-re
18: Reporting-UA: sieve; GNU Mailutils [0-9][0-9.]*
-re
19: Arrival-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
20: Final-Recipient: RFC822; foobar@nonexistent.net
21: Action: deleted
22: Disposition: automatic-action/MDN-sent-automatically;deleted
-re
23: Last-Attempt-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
24:
-re
25: [0-9:=-]+
26: Content-Type: message/rfc822
27:
28: From: youcouldberich!@reply-by-postal-mail.invalid
29: To: rube@landru.example.edu
30: Subject: $$$ YOU, TOO, CAN BE A MILLIONAIRE! $$$
31: Date: TBD
32: X-Number: 0015
33:
34: YOU MAY HAVE ALREADY WON TEN MILLION DOLLARS, BUT I DOUBT
35: IT! SO JUST POST THIS TO SIX HUNDRED NEWSGROUPS! IT WILL
36: GUARANTEE THAT YOU GET AT LEAST FIVE RESPONSES WITH MONEY!
37: MONEY! MONEY! COLD HARD CASH! YOU WILL RECEIVE OVER
38: $20,000 IN LESS THAN TWO MONTHS! AND IT'S LEGAL!!!!!!!!!
39: !!!!!!!!!!!!!!!!!!111111111!!!!!!!11111111111!!1 JUST
40: SEND $5 IN SMALL, UNMARKED BILLS TO THE ADDRESSES BELOW!
41:
-re
42: [0-9:=-]+
43:
END OF MESSAGE
ENVELOPE FROM: MAILER-DAEMON@nonexistent.net
ENVELOPE TO: <bar@dontmailme.org>
......@@ -162,40 +160,39 @@ ENVELOPE TO: <bar@dontmailme.org>
11: I don't want to read these messages.
12:
13: Regards.
14: .
15:
-re
16: [0-9:=-]+
17: Content-Type: message/delivery-status
18:
-re
19: Reporting-UA: sieve; GNU Mailutils [0-9][0-9.]*
-re
20: Arrival-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
21: Final-Recipient: RFC822; foobar@nonexistent.net
22: Action: deleted
23: Disposition: automatic-action/MDN-sent-automatically;deleted
-re
24: Last-Attempt-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
25:
-re
26: [0-9:=-]+
27: Content-Type: message/rfc822
28:
29: Received: (from bar@dontmailme.org)
30: by dontmailme.org id fERKR9N16790
31: for foobar@nonexistent.net; Fri, 28 Dec 2001 22:18:08 +0200
32: Date: Fri, 28 Dec 2001 23:28:08 +0200
33: From: Bar <bar@dontmailme.org>
34: To: Foo Bar <foobar@nonexistent.net>
35: Message-Id: <200112232808.fERKR9N16790@dontmailme.org>
36: Subject: Coffee
37:
38: How about some coffee?
39:
-re
40: [0-9:=-]+
41:
14:
-re
15: [0-9:=-]+
16: Content-Type: message/delivery-status
17:
-re
18: Reporting-UA: sieve; GNU Mailutils [0-9][0-9.]*
-re
19: Arrival-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
20: Final-Recipient: RFC822; foobar@nonexistent.net
21: Action: deleted
22: Disposition: automatic-action/MDN-sent-automatically;deleted
-re
23: Last-Attempt-Date: [A-Z][a-z][a-z], [A-Z][a-z][a-z] [ 0-3][0-9] [ 0-2][0-9]:[0-6][0-9]:[0-6][0-9] [0-9][0-9][0-9][0-9] [a-zA-Z0-9]*
24:
-re
25: [0-9:=-]+
26: Content-Type: message/rfc822
27:
28: Received: (from bar@dontmailme.org)
29: by dontmailme.org id fERKR9N16790
30: for foobar@nonexistent.net; Fri, 28 Dec 2001 22:18:08 +0200
31: Date: Fri, 28 Dec 2001 23:28:08 +0200
32: From: Bar <bar@dontmailme.org>
33: To: Foo Bar <foobar@nonexistent.net>
34: Message-Id: <200112232808.fERKR9N16790@dontmailme.org>
35: Subject: Coffee
36:
37: How about some coffee?
38:
-re
39: [0-9:=-]+
40:
END OF MESSAGE
FILE END
TEST END
......