mirror of
https://github.com/KumoCorp/kumomta.git
synced 2026-08-21 00:01:17 +00:00
ee1e5b980e
import_headers takes an array of per-spec option tables, each describing how a single header name or pattern should be imported into the message metadata. Compared to import_x_headers it adds: * Trailing-`*` wildcard patterns (e.g. `X-*`) alongside exact names. Bare/leading/interior wildcards are rejected at compile time. * `match` of `first`, `last` (default), or `all`. `all` captures every matching header instance as an array of strings; the others capture a string. Specs that produce no matches write nothing. * `transform` selects the metadata key style: `snake_case` (default, matches the existing import_x_headers behavior), `kebab_case`, `camel_case`, or `pascal_case`. Header matching itself is always case-insensitive. * `target` overrides the metadata key for exact-name specs. * `remove` strips the matched headers from the message body in a single follow-up pass. When more than one spec could match a header, the first matching spec wins, so callers can place specific rules ahead of a wildcard catch-all. import_x_headers now delegates to import_headers, so its behavior is unchanged and the two share a single implementation. retain_headers now passes the header index alongside the &Header to its closure, which import_headers uses for its post-pass removal step instead of tracking a parallel counter. Existing callers that don't need the index ignore it with `_`. Closes: #515
53 lines
1.3 KiB
Markdown
53 lines
1.3 KiB
Markdown
---
|
|
tags:
|
|
- meta
|
|
---
|
|
|
|
# import_x_headers
|
|
|
|
```
|
|
message:import_x_headers([NAMES])
|
|
```
|
|
|
|
When called with no parameters, iterates the headers of the message, and for
|
|
each header with an `"X-"` prefix, imports the header into the message
|
|
metadata.
|
|
|
|
When called with a list of header names, only those headers, if present in the
|
|
message, will be imported to the message metadata. Header names passed in this
|
|
way do not need to have an `X-` prefix, making it convenient to use this method
|
|
as a way to import an arbitrary list of headers for logging purposes.
|
|
|
|
When importing an `X-` header, the header name is normalized to lowercase and any
|
|
`-` are transformed to underscores `_`.
|
|
|
|
For more flexible matching (wildcards, choosing first/last/all instances,
|
|
optional removal of matched headers, alternate naming transforms), see
|
|
[message:import_headers](import_headers.md).
|
|
|
|
For example, with a message content of:
|
|
|
|
```
|
|
X-Campaign-ID: 12345
|
|
X-Mailer: foobar
|
|
Subject: the subject
|
|
|
|
The body
|
|
```
|
|
|
|
calling:
|
|
|
|
```lua
|
|
message:import_x_headers()
|
|
print(message:get_meta 'x_campaign_id') -- prints 12345
|
|
print(message:get_meta 'x_mailer') -- prints foobar
|
|
```
|
|
|
|
but calling:
|
|
|
|
```lua
|
|
message:import_x_headers { 'x-campaign-id' }
|
|
print(message:get_meta 'x_campaign_id') -- prints 12345
|
|
print(message:get_meta 'x_mailer') -- prints nothing
|
|
```
|