Tags

Tags give the ability to mark specific points in history as being important
  • v1.7.0

    7a1356fe · [RELEASE] v1.7.0 ·
    v1.7.0
    
    ### Added
    
    - `sendmail_mta_family`, and Postfix recognised behind a `sendmail`
      binary, also when `dpkg-divert` renamed it to `sendmail.distrib`
      (README "Available settings").
    
    - Configuration files of the wrapper's own, `/etc/sendmail-wrapper.conf`
      and `~/.sendmail-wrapper.conf`, read after the msmtprc of their level;
      msmtp refuses `sendmail_*` keys in its own files, and a warning names
      an msmtprc that holds some (README "Configuration").
    
    - `SENDMAIL_SYSTEM_CONFIG` and `SENDMAIL_WRAPPER_CONFIG`, each honoured
      only while the default file is absent (README "Configuration").
    
    - `SENDMAIL_REPLYTO` as an alias of `SENDMAIL_REPLY_TO` (README
      "Configuration").
    
    - A loop guard: the wrapper refuses to run itself, or a second copy of
      itself, as backend (`SENDMAIL_WRAPPER_DEPTH`, README "Configuration").
    
    - `sendmail_default_account` in a config file (README "Available
      settings").
    
    - `sendmail_warn_allmailfrom`: with nullmailer, a warning when
      `/etc/nullmailer/allmailfrom` will replace the envelope sender (README
      "Available settings").
    
    - msmtp's `-a NAME` selects the wrapper's account section like
      `--account`, which wins where both are given (README "Default account
      and msmtp integration").
    
    - Backend modes (`-bp`, `-bd`, `-bi`, `-bt`, `-bv`, `-bs`, `-q`) are run
      by the backend without message processing; called as `mailq` or
      `newaliases` the wrapper implies `-bp` or `-bi` (README "Exit codes").
    
    - Flags: `-r` as `-f`, `-R`, `-L`, `-O`, `-p`, `-bm`, `-V envid`, Exim
      `-oM*`, `-N` and `-M*`, msmtp `-a` and its long options, nullmailer
      `-h` (`--help` "Known backends").
    
    - `--help` lists the permitted flags per backend family and every
      `sendmail_*` setting (`--help` "Known backends").
    
    - The module is importable and `main(argv)` returns the exit code
      (GUIDELINES/README.md "Working on it").
    
    - A pytest suite under `tests/`: integration and unit layers
      (GUIDELINES/README.md "Working on it").
    
    - The MIT licence, as `LICENSE` and as an SPDX header in `sendmail.py`,
      which is installed without the rest of the repository (LICENSE).
    
    ### Changed
    
    - Aliases reach the backend in canonical form, short flags with a value
      as two arguments, glued-only flags as one token (README "Argument
      filtering").
    
    - The last `-f` wins, and sets the Received and generated From address;
      `sendmail_force_header from` replaces it (README "Available settings").
    
    - Account names are case-sensitive, `account NAME : BASE` inherits, an
      `account default` section applies by default. Configuration may need
      updating (README "Default account and msmtp integration").
    
    - `$VAR` expansion applies to every configuration value, locked ones
      included (README "Available settings").
    
    - `sendmail_header_add` keeps an existing header; `sendmail_header_edit`
      takes `\/` and flags (README "Custom header actions").
    
    - `To:` is generated for a single recipient only (README "Recipient
      handling").
    
    - The Received header is one comment and is inserted first (README
      "Message normalisation").
    
    - Abbreviations of the wrapper's options (`--acc`) go to the backend
      (README "Command-line options").
    
    - Sender validation accepts bare hosts, IDN and non-ASCII domains, and
      rejects parentheses and backslashes; the Received comment escapes
      the account name (README "Available settings").
    
    - nullmailer no longer receives `-i`, `-oi` or `-t`; msmtp no longer
      `-bs` or `--show-envelope` (`--help` "Known backends").
    
    - Wrapper-side errors, and a backend killed by a signal, exit 75 and
      are logged at ERR (README "Exit codes").
    
    - `--version` exits 0 where the backend runs but has no version query
      (nullmailer); it was 2 (README "Exit codes").
    
    - With `-v` the backend's output reaches the terminal instead of the
      log (`--help` "Known backends").
    
    - Only non-UTF-8 inline text parts are re-encoded and attachments keep
      their bytes; a signed message passes through byte-identical, a nested
      `multipart/signed` included (README "Signed messages").
    
    - Python 3.9 or newer is required; an older interpreter exits 75 with
      one line (README, top).
    
    ### Removed
    
    - `sendmail_account`, which nothing read; `msmtpd` as a backend
      candidate (README "Available settings").
    
    - The legacy shell wrappers `sendmail-*.sh`, superseded by `sendmail.py`
      (`git log -- 'sendmail-*.sh'`).
    
    ### Fixed
    
    - A bare `sendmail_mta` name was resolved in the working directory, and
      discovery stopped at the wrapper on PATH instead of looking further
      (README "Available settings").
    
    - `sendmail_flags_list` crashed the wrapper, an invalid `sendmail_filter`
      was a traceback, and `sendmail_filter off` still removed unknown flags
      (README "Argument filtering").
    
    - Bodies with a transfer encoding, and non-text bodies, were corrupted
      (README "Message normalisation").
    
    - `-fADDR` and VERP senders were dropped, and values of sendmail flags
      unknown to the tables became recipients (README "Argument filtering").
    
    - Any `SENDMAIL_*` environment variable crashed the wrapper; locked keys
      were lost under `sendmail_ignore_global_config`, on undecodable bytes,
      when spelt with dashes or capitals, and when a later line set its own
      list (README "Locked settings").
    
    - `sendmail_header_append`, `sendmail_force_header reply-to`,
      `sendmail_reply-to` and the replacement of an invalid Message-ID did
      nothing (README "Custom header actions").
    
    - Duplicate `To:`/`Cc:` lines were dropped (now merged, keeping the
      header's spelling), and header actions from `defaults` ran twice
      (README "Message normalisation").
    
    - A closed standard input produced a traceback (README "Message
      normalisation").
    
    - `sendmail.py` was recorded without the executable bit, so a clone
      could not run it (README "Installation").
    
    - A `\[` in a `sendmail_header_edit` replacement kept its backslash
      (README "Custom header actions").
    
    - `-F` disabled the `from` directive; a system `account default` was
      ignored, and a repeated `account` section discarded the earlier one
      (README "Default account and msmtp integration").
    
    - A `sendmail_header_*` action in the user file undid a header the
      system file forces (README "Available settings").