# Changelog

The format is based on [Keep a Changelog](https://keepachangelog.com/).

### Unreleased

### [1.3.0] - 2026-05-19

- changed: replaced address-rfc2821 with @haraka/email-address
- fix: global dot-escape + (?:^|\.) boundary anchor
- fix: mech_include catch now returns SPF_TEMPERROR and logs error
- fix: pre-check changed to >= LIMIT (blocks the 11th)
- fix: README links stale RFC 4408 → RFC 7208
- fix: enforce RFC 7208 §4.6.4 void-lookup limit (PermError after 2)
- feat: per-DNS-query timeout (configurable via `dns_timeout`)
- feat: %{p} macro expands via fcrdns plugin's validated PTR (RFC 7208 §7.3)
- doc: list `exp=` as unsupported in README
- feat(spf): injectable DNS resolver so tests exercise the real resolver path
  - replaces flaky public-DNS lookups (gmail/aexp/facebook/google)
- changed: bump deps to latest
- changed: remove unnecessary done callbacks in tests (#38)
- changed: test runner is now node:test
- feat(spf): injectable DNS resolver so tests exercise the real resolver path
  - replaces flaky public-DNS lookups (gmail/aexp/facebook/google)
- changed: bump all deps to latest

### [1.2.11] - 2026-02-13

- feat(DSN): update with modern DSN values
- style(header): fold the SPF header, remove redundant server name
- test: update SPF test to no longer fail, #36
- dep(nopt): bump to v9
- deps(\*): bump to latest

### [1.2.10] - 2025-08-24

- index.js: light es6 refactor
  - fix: avoid inadvertant double unescape
  - delete legacy config support
- doc(README): tighten up grammar, improve flow
- config(spf.ini): add commented out default setings
- test(spf): update IP for google.com SPF test
- chore(lint): update to eslint 9
- chore(deps): bump versions to latest
- dev(codeclimate): relax some tests
- style(prettier): moved config into package.json

### [1.2.9] - 2024-11-19

- fix: undefined variable exception when no MX is found, #32
- add: new spf_record_include_match property to allow for additional filtering
- deps: bump versions to latest

### [1.2.8] - 2024-10-07

- fix: mech_MX crit error on logging undef addrs

### [1.2.7] - 2024-08-14

- test: in index.js, unref timers, so test suite exits
- chore: bump dep versions

### [1.2.6] - 2024-08-14

- mech_mx: fix incorrect evaluation of MX addresses

### [1.2.5] - 2024-04-17

- get_mx: filter out implicit MX records
- dep: eslint-plugin-haraka -> @haraka/eslint-config
- chore: lint: remove duplicate / stale rules from .eslintrc
- chore: populate [files] in package.json. Delete .npmignore.
- doc(CONTRIBUTORS): added
- doc(CHANGES): renamed CHANGELOG
- chore: prettier

### [1.2.4] - 2024-02-07

- doc(README): add ini code fences, improve docs
- dep(net-utils): bumped 1.5.0 -> 1.5.3

### [1.2.3] - 2023-07-14

- fix: Handle DNS TXT array result (#15)

### [1.2.2] - 2023-06-22

- fix: check for DNS results befor iterating, fixes #13
- es6(lib/spf): replace `self` with `this`

### [1.2.1] - 2023-06-19

- fix: call skip_hosts via 'this' instead of exports (#11)
- skip configuration was being ignored
- es6(index): replace `plugin` with `this`
- deps: bump versions to latest

### [1.2.0] - 2023-01-19

- Export SPF class (#8)

### [1.1.3] - 2022-12-23

- fix print log (#6)

### [1.1.2] - 2022-12-21

- dep: depend on net-utils 1.5.0
- refactor: convert loop to for...of

### [1.1.0] - 2022-12-17

- spf: use async/await dns
- replace many callbacks with async/await
- make check_host more linear
- ci(publish): only when package.json bumped
- index: safeguard cfg path with optional chaining, fixes #2
- dep(nopt): bump 6 -> 7

### [1.0.1] - 2022-07-23

- add bin/spf
- move spf.js to lib/spf.js

### 1.0.0 - 2022-07-23

- Import from Haraka

[1.0.0]: https://github.com/haraka/haraka-plugin-spf/releases/tag/v1.0.0
[1.0.1]: https://github.com/haraka/haraka-plugin-spf/releases/tag/1.0.1
[1.1.0]: https://github.com/haraka/haraka-plugin-spf/releases/tag/v1.1.0
[1.1.2]: https://github.com/haraka/haraka-plugin-spf/releases/tag/v1.1.2
[1.1.3]: https://github.com/haraka/haraka-plugin-spf/releases/tag/1.1.3
[1.1.4]: https://github.com/haraka/haraka-plugin-spf/releases/tag/1.1.4
[1.2.0]: https://github.com/haraka/haraka-plugin-spf/releases/tag/1.2.0
[1.2.1]: https://github.com/haraka/haraka-plugin-spf/releases/tag/1.2.1
[1.2.2]: https://github.com/haraka/haraka-plugin-spf/releases/tag/1.2.2
[1.2.3]: https://github.com/haraka/haraka-plugin-spf/releases/tag/1.2.3
[1.2.4]: https://github.com/haraka/haraka-plugin-spf/releases/tag/v1.2.4
[1.2.5]: https://github.com/haraka/haraka-plugin-spf/releases/tag/v1.2.5
[1.2.6]: https://github.com/haraka/haraka-plugin-spf/releases/tag/v1.2.6
[1.2.7]: https://github.com/haraka/haraka-plugin-spf/releases/tag/v1.2.7
[1.2.9]: https://github.com/haraka/haraka-plugin-spf/releases/tag/v1.2.9
[1.2.10]: https://github.com/haraka/haraka-plugin-spf/releases/tag/v1.2.10
[1.2.11]: https://github.com/haraka/haraka-plugin-spf/releases/tag/v1.2.11
[1.3.0]: https://github.com/haraka/haraka-plugin-spf/releases/tag/v1.3.0
