Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

haraka-plugin-qmail-deliverable

haraka11.4kMIT1.2.5

Haraka plugin that validates recipients against Qmail::Deliverable

haraka, haraka-plugin, plugin, recipients, qmail-deliverable

readme

Build Status Code Climate

haraka-plugin-qmail-deliverable

A client for checking the deliverability of an email address against the qmail-deliverabled daemon.

On incoming messages (relaying=false), validate the RCPT TO address.

Configuration

The host and port that qmail-deliverabled is listening on can be set in config/qmail-deliverable.ini

  • host (Default: localhost)
  • port (Default: 8998)
  • check_mail_from= (Default: true)

When check_mail_from is enabled, the MAIL FROM address is checked for deliverability. The deliverable status can be inspected by checking transaction.notes.local_sender. This information can be used later to influence mail routing.

Fine control of MX routing

MX routing for individual domains can be set by defining queue and next_hop.

  • queue: a queue plugin (smtp_forward, qmail-queue, lmtp), or lmtp. When queue=lmtp, if qmail-deliverable reports that the destination address is a mailbox (ie, not email list, forward, alias, etc.), then this plugin will configure the next_hop to be lmtp://$host/ and will set up that route (via get_mx()) so that outbound delivers the message to the mailbox via LMTP.

  • next_hop: a URL. Examples: smtp://mx.example.com and lmtp://int.mx.example.com:24. This plugin uses next_hop to direct messages to local mailboxes via LMTP. If the LMTP server (dovecot, in my case) is not the same host that is running qmail-deliverabled, set next_hop accordingly.

Per-domain Configuration

Domains can have their own configuration. The defaults are the same, so only the differences needs to be declared. Example:

```ini
[example.com]
host=192.168.0.1

[example2.com]
host=192.168.0.2
```

changelog

Changelog

The format is based on Keep a Changelog.

Unreleased

1.2.5 - 2025-02-06

  • fix: check txn still exists after callback

1.2.4 - 2025-01-26

  • move prettier config into package.json
  • dep(eslint): upgrade to v9

1.2.3 - 2024-04-22

  • fix: use outbound.send_trans_email (was o.send_email)
  • populate [files] in package.json.
  • dep: eslint-plugin-haraka -> @haraka/eslint-config
  • lint: remove duplicate / stale rules from .eslintrc
  • prettier
  • ci: use more shared GHA workflows
  • doc(CONTRIBUTORS): added
  • doc(CHANGELOG): fixed version release URLs

1.2.1 - 2023-06-12

  • fix: use arrow fn in load_qmd_ini callback

1.2.0 - 2023-06-12

  • previously, would set next_hop=lmtp w/o setting q.wants=lmtp
  • feat: also route via LMTP for local recipients when relaying
  • cfg: rename check_outbound -> check_mail_from
  • cfg: declare check_mail_from as boolean
  • doc: added queue.wants & next_hop
  • chore: much refactoring to simplify do_qmd_response
  • chore: replace url.parse with new url.URL()
  • chore: added many tests

1.1.1 - 2022-11-29

  • ci: only publish when package.json has changes
  • feat: decrease a log message severity

1.1.0 - 2021-01-06

  • ci: use shared GHA workflows
  • feat: set txt.notes.local_sender & local_recipient
  • test: replace nodeunit with mocha
  • lint: es6 prefer-template
  • lint: es6 object-shorthand
  • lint: es6 interpolated strings
  • drop node 8 & 10 testing, add 14

1.0.6 - 2018-12-20

  • set txn.notes.local_recipient

1.0.5 - 2018-01-26

  • assure transaction still exists before trying to access txn.notes

1.0.4 - 2018-01-20

  • tighten up LMTP routing to only when explicitely set

1.0.3 - 2017-09-26

  • use correct name of mail hook
  • update loginfo to use get and avoid undef crash

1.0.2 - 2017-09-01

  • adds ability to route email via notes.queue.wants and queue.next_hop
  • when destination is a mailbox and next_hop is a LMTP url, routes via LMTP

1.0.1 - 2017-08-29

  • initial release