[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug-mailutils] GNU Mailutils 2.0 released

From: Sergey Poznyakoff
Subject: [bug-mailutils] GNU Mailutils 2.0 released
Date: Fri, 26 Dec 2008 01:30:46 +0200


I am pleased to announce the release of GNU Mailutils version 2.0.

GNU Mailutils is a set of libraries and programs for electronic mail
handling. It contains a rich set of mail-related utilities and servers,
including `pop3d', `imap4d', `sieve' and a universal mail delivery agent,

All utilities are able to operate on mailboxes of arbitrary  formats,
ranging from standard UNIX maildrops, through maildir and up to remote
mailboxes, which are transparently accessed using IMAP4, POP3 and SMTP.

This release contains a lot of improvements over the previous version.
See below for the list of user-visible changes.

Here are the compressed sources:
  ftp://ftp.gnu.org/gnu/mailutils/mailutils-2.0.tar.gz   (4.4MB)
  ftp://ftp.gnu.org/gnu/mailutils/mailutils-2.0.tar.bz2   (3.1MB)

Here are the GPG detached signatures[*]:

Here are the MD5 and SHA1 checksums:

d57a4fb60b5a68c83987ff613a09dbc7  mailutils-2.0.tar.gz
299ae73c1c0143de94d7486bf7f479a4  mailutils-2.0.tar.bz2
9736c0c08bbf92c52fa1a1c4084b440eed65f289  mailutils-2.0.tar.gz
ffe23b80fcb3533b4d737572b65da740031adcf5  mailutils-2.0.tar.bz2

[*] You can use either of the above signature files to verify that
the corresponding file (without the .sig suffix) is intact.  First,
be sure to download both the .sig file and the corresponding tarball.
Then, run a command like this:

  gpg --verify mailutils-2.0.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver keys.gnupg.net --recv-keys 55D0C732

and rerun the `gpg --verify' command.

This release was bootstrapped with the following tools:
  Autoconf 2.61
  Automake 1.10.1
  Libtool 2.2.5a
  Gnulib-tool 0.0.1317-d51f4-modified

The list of user-visible changes follows:

* New configuration file format.

See documentation, chapter 2.2, `Mailutils Configuration File', for a
detailed description.

* Programs

** Debugging and online help

Each Mailutils utility understands two additional command line

 --debug-level=LEVEL    Set Mailutils debugging level.
 --debug-line-info      Show source info with debugging messages.

(see also `** Global debugging and verbosity settings.', below)

The programs using configuration file facility also understand the
--config-help command line option.  This option prints on the standard
output the detailed description of configuration file statements that
affect the given program.

** URL parameters.

Additional mailbox URL parameters `type', `user' and `param' can
appear in any local URLs.

** MAIL and FOLDER environment variables.

These variables are consulted only if mail-spool directory is not
explicitely set either in the configuration files or in the command
line. This is different from the previous versions.

** New utility `maidag'

Maidag is a MAIl Delivery AGent. It is a general-purpose MDA able to
run in both traditional and LMTP mode and to deliver mails to various
mailbox formats.  These formats, among others, include remote+smtp and
remote+sendmail (see `New mailbox types.', below), which are
equivalent to forwarding a message over SMTP.  Thus, maidag supercedes
both `mail.local' and `mail.remote' (which are still included for
backward compatibility).  Maidag is also able to process incoming 
messages using Sieve or Scheme scripts and, based on results of this
processing, to take a decision on whether to actually deliver and
where to deliver them.

** Comsat

The `comsat' utility is able to notify about messages delivered to
a mailbox of any `local' type, i.e.: UNIX mailbox, MH and Maildir.
This is implemented using quick access mode.  See `Quick access to a
message', below.

The communication protocol has been modified to make this possible.
The traditional comsat protocol is supported as well.

** Sieve

*** New Sieve action `pipe'

Syntax: pipe [:envelope] <command line: string> 

This action executes the given <command line> and pipes the message to
its standard input. If the :envelope tag is given, the envelope of the
message is piped as well.

*** Fileinto :permissions

The `fileinto' action takes a tag :permissions that allows to set
permissions on the mailbox, in case it is created.  Its argument is a
string, similar to that used in chmod(1):


For example:

        fileinto :permissions "g=rw,o=r" "/shared/mailbox"

** Client SMTP STARTTLS support

** Support for new protocols: POPS (pops://) and IMAPS (imaps://),

** LDAP support (authentication and authorization).

** Support for TCP wrappers.

The support for TCP wrappers is added to the daemon programs (imap4d,
pop3d, maidag). The support is controlled at compile time by the
--with-tcpwrappers command line options to configure. By default, it
is enabled if libwrap presence is detected. A set of configuration
file statements are provided for fine tuning TCP wrappers at run-time.

** pop3d and imap4d ports.

Pop3d and imap4d can be configured to listen on several different
IP addresses/ports (or even local sockets) simultaneously.

** pop3d: Fixed APOP handling.

** Imap4d supports UNSELECT extension.

** Imap4d supports ID extension.

** imap4d supports PREAUTH mode.

Three mechanisms are provided for authentifying the connection in

 1. stdio - PREAUTH mode is enabled automatically if imap4d is started
    from command line in interactive mode (-i command line
    option). The current login name is used as the user name.

 2. ident - The remote machine is asked about the requester identity
    using the identification protocol (RFC 1413). Both plaintext and
    DES encrypted replies are understood.

 3. prog - Imap4d invokes an external program to authenticate the
    connection. The command line is obtained from the supplied string,
    by expandind the following variables:

      1) ${client_address} - Remote IP address in dotted-quad notation;
      2) ${client_port}    - Remote port number;
      3) ${server_address} - Local IP address;
      4) ${server_port}    - Local port number.

    If the connection is authenticated, the program should print the
    user name, followed by a newline character, on its standard
    output and exit with code 0.

    Otherwise, it shoud exit with a non-zero exit code.
* Libraries

** Support for ESMTP SIZE extension (RFC 1870).

** Diagnostic and debugging functions essentially rewritten.

A set of debugging macros, MU_DEBUG0 through MU_DEBUG11, is provided.
New functions mu_debug_printf and mu_debug_vprintf allow for flexible
formatting of debugging messages. The mu_debug_t object features
built-in line bufferring.

The new function mu_debug_check_level(d,l) returns true if the logging
level currently set for debugging object `d' matches that given by

New diagnostics functions are available, among them:

  void mu_diag_vprintf (int level, const char *fmt, va_list ap);
  void mu_diag_printf (int level, const char *fmt, ...);
  void mu_diag_voutput (int level, const char *fmt, va_list ap);
  void mu_diag_output (int level, const char *fmt, ...);

A new header file, mailutils/diag.h, provides declarations for these
and other related functions.
The functions mu_error and mu_verror are shortcuts for
mu_diag_output (MU_DIAG_ERROR, ...)  and mu_diag_voutput (MU_DIAG_ERROR, ...),

The function mu_error_set_print is deprecated as well as the
mu_error_pfn_t type. They are, however, still supported. The following
approach is recommended to use instead of mu_error_set_print:

      mu_diag_get_debug (&debug);
      mu_debug_set_print (debug, new_printer, NULL);

** Header iteration

New function `mu_header_get_iterator' returns an iterator for this
header object. Thus, the following code loops over all headers:

      mu_iterator_t itr;
      mu_header_get_iterator (header, &itr);
      for (mu_iterator_first (itr); !mu_iterator_is_done (itr);
           mu_iterator_next (itr))
          const char *hdr, *val;
          mu_iterator_current_kv (itr,
                                  (const void**)&hdr,
          /* Do something with hdr and val */                     
      mu_iterator_destroy (&itr);

** Global debugging and verbosity settings.

These settings provide default values for mu_debug_t objects created
by various library objects. The following functions are provided for
dealing with global debugging level:

   unsigned mu_global_debug_level (const char *object_name);
   int mu_global_debug_set_level (const char *object_name, unsigned level);
   int mu_global_debug_clear_level (const char *object_name);

** New function mu_mailbox_sync

It supersedes mu_mailbox_save_attributes, which is now considered

** Observable event handling

Each event type is associated with an event-specific data
pointer. This pointer is passed to event handling functions along with
an opaque function-specific data pointer. This affects the following

  mu_observer_set_action_data (New function)

New type of event, MU_EVT_MESSAGE_APPEND, is signalled whenever a new
message is appended to the mailbox.

** Quick access to a message

A set of functions are provided for so-called `quick access' to mail

Quick access is used when an application needs to quickly read one
message from the mailbox. In particular, this mode is used by comsat.

To use quick access functions, the mailbox must be opened with flags
mu_mailbox_quick_get_message can then be used to retrieve the message:

   int mu_mailbox_quick_get_message (mu_mailbox_t mbox,
                                    mu_message_qid_t qid,
                                    mu_message_t *pmsg);        

The message is identified by the second argument, qid.

The function mu_message_get_qid can be used to retrieve
mu_message_qid_t identifier for a message:

   int mu_message_get_qid (mu_message_t msg, mu_message_qid_t *pqid);

** New `aget' and `sget' accessors for mu_url_t

The following new accessors are provided:

extern int mu_url_sget_scheme  (const mu_url_t, const char **);
extern int mu_url_aget_scheme  (const mu_url_t, char **);  
extern int mu_url_sget_user  (const mu_url_t, const char **);
extern int mu_url_aget_user  (const mu_url_t, char **);  

extern int mu_url_sget_passwd  (const mu_url_t, const char **);
extern int mu_url_aget_passwd  (const mu_url_t, char **);  
extern int mu_url_sget_auth  (const mu_url_t, const char **);
extern int mu_url_aget_auth  (const mu_url_t, char **);  

extern int mu_url_sget_host  (const mu_url_t, const char **);
extern int mu_url_aget_host  (const mu_url_t, char **);  
extern int mu_url_sget_path  (const mu_url_t, const char **);
extern int mu_url_aget_path  (const mu_url_t, char **);  

extern int mu_url_sget_query  (const mu_url_t, const char **);
extern int mu_url_aget_query  (const mu_url_t, char **);  

int mu_url_sget_fvpairs (const mu_url_t, size_t *, char ***);
int mu_url_aget_fvpairs (const mu_url_t, size_t *, char ***);

** ACL

A set of functions implements general-purpose access control lists.
They are declared in the header file mailutils/acl.h.  Currently,
these functions support IPv4 and UNIX address families.  Support for
more address families, in particular IPv6, will be added in future.
The following actions can be defined in ACLs:

 1. mu_acl_accept       - Accept connection.
 2. mu_acl_deny         - Deny connection.
 3. mu_acl_log          - Issue a log message, using mu_diag.*
                          diagnostics functions.
 4. mu_acl_exec         - Execute an external program. 
 5. mu_acl_ifexec       - Execute an external program and accept or
                          deny connection depending on its exit code.

** KWD

A set of functions is provided for translating string values to
integer tokens and vice-versa using simple translation tables.
These functions are declared in the header file mailutils/kwd.h.

** Vartab

A set of functions is provided for performing variable expansion in
strings. These functions are declared in the header file
** Incompatible change in mu_url_get_.* return value

Any mu_url_get_.* accessors return MU_ERR_ENOENT if the corresponding
field is not present in the object. Previous versions in that case
returned 0 and stored empty string in the output buffer.

** Prog mailer.

New mailer type, `prog' is introduced. It is a generalization of the
`sendmail' message. The syntax for this mailer type is:


where `args' is a list of command line arguments separated by `&'
signs. When using this mailer, mailutils executes `progname' with the
given arguments and pipes the message to its standard input.

** New mailbox types.

Two new mailbox types, "remote+smtp" and "remote+sendmail", are
supported. These are `append-only' mailboxes, i.e. the only operation
that can be done on them is mu_mailbox_append_message.  E.g.,
appending to the URL `remote+smtp://' is equivalent to
sending a message using mailer `smtp://'.

In addirion, "remote+prog" mailbox (abbreviated as "|") is useful for
piping messages to the standard input of an external program.

** New argcv functions.

-  int mu_argcv_get_np (const char *command, int len,
                        const char *delim, const char *cmnt,
                        int flags,
                        int *pargc, char ***pargv, char **endp);

This function is an alternative entry point to
mu_argcv_get/mu_argcv_get_n functions. The resulting argv will contain
non-whitespace delimiters only if flags contains the bit

-  void mu_argcv_remove (int *pargc, char ***pargv,
                         int (*sel) (const char *, void *), void *);

Removes from pargc/pargv all elements for which the sel function
returns true.
** New registry functions.

- int mu_registrar_lookup_url (mu_url_t url, int flags,
                               mu_record_t *precord, int *pflags);
** Fixed parsing of URLs similar to file:///a/b. 

It is parsed as an absolute file name `/a/b'.

Previous versions incorrectly understood such an URL as `a/b'
(relative file name). 

** Remove v0.6 compatibility layer.

** Function mu_mail_directory is removed.

** New function mu_mailbox_url.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]