procmail

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
procmail
Original authorStephen R. van den Berg
DeveloperPhilip A. Guenther
Initial releaseDecember 7, 1990
Stable release
3.24 / March 2, 2022
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemAny Unix-like
    PlatformCross-platform
    TypeMail filter
    LicenseGPL or Artistic License

    procmail is an email server software component — specifically, a message delivery agent (MDA). It was one of the earliest mail filter programs. It is typically used in Unix-like mail systems, using the mbox and Maildir storage formats.

    procmail was first developed in 1990, by Stephen R. van den Berg.[1] Philip Guenther took over maintainership for a number of years, but relinquished the role in 2014.[2] The software remained unmaintained for several years, and was believed to be defunct.[3] In 2020 May, Stephen van den Berg resumed maintenance again.[4] The program has since seen multiple releases and bug-fixes.

    The most common use case for procmail is to filter mail into different mailboxes, based on criteria such as sender address, subject keywords, and/or mailing list address.[5][6]

    Another use is to let procmail call an external spam filter program, such as SpamAssassin. This method can allow for spam to be filtered or deleted.

    The procmail developers have built a mailing list manager called SmartList on top of procmail.

    Procmail is an early example of a mail filtering tool and language. It is a data-driven programming language, similar to earlier line-oriented languages such as sed and AWK.

    Operation

    [edit | edit source]

    procmail reads mail messages given to it on standard input, delivering or otherwise dispositioning each one. procmail is typically not invoked directly by the user. Rather, some other mail program will call upon procmail to deliver a message according to the user's wishes. Message transfer agents (MTAs), such as Sendmail or Postfix), can be configured to use procmail to deliver all mail. A mail retrieval agent such as fetchmail can invoke procmail as needed. The companion tool formail allows procmail to be applied to mail already in a mailbox.

    procmail's behavior is controlled by a config file (by default, .procmailrc in the user's home directory) containing one or more recipes, read in order. Each recipe consists of a mode, zero or more conditions, and an action.

    Conditions are usually extended regular expressions, although there are other forms. A recipe's action is taken only if all the conditions match (logical AND). If no conditions is given, the recipe is unconditional and the action always runs.

    The action specifies what is to be done with the message, such as deliver it to a particular mailbox, or discard it. A recipe and its action can be delivering or non-delivering. Processing of a given message stops with the first delivering recipe (unless the recipe's mode flag specifies otherwise).

    Example

    [edit | edit source]

    A simple .procmailrc config file might look like this:

       MAILDIR=$HOME/mail
       DEFAULT=$MAILDIR/inbox
       
       :0:
       * ^List-Id: .*<foo-announce@lists.example.com>
       foo-announce
    

    The above routes mail from a hypothetical mailing list to a separate mailbox called foo-announce, while delivering all other mail to the inbox mailbox, both located under the $HOME/mail/ directory.

    Criticism

    [edit | edit source]

    By default, procmail will "bounce" undeliverable mail back to the sender, or discard it entirely. A mistake in the config file can result in all mail being rejected or discarded.

    The configuration file format is sometimes regarded as cryptic.

    procmail is not well-suited for processing mail involving Multipurpose Internet Mail Extensions (MIME). It cannot decode or recognize MIME-specific headers or international characters.

    For approximately ten years, procmail was not maintained, and multiple serious security vulnerabilities[7] were discovered in the intervening time span[3] (since fixed).

    See also

    [edit | edit source]

    Lua error in mw.title.lua at line 392: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal').

    Mail architecture

    [edit | edit source]

    Similar programs and technologies

    [edit | edit source]

    References

    [edit | edit source]
    1. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    3. ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).

    Further reading

    [edit | edit source]
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — Current source code repository and distribution point
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — Procmail homepage, as it appeared when it was working
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — Searchable archives of the procmail mailing list