Federico Mariani created CAMEL-25534:
----------------------------------------
Summary: camel-mail - subject option description still says the
Subject header takes precedence, but useHeaderSubject defaults to false
Key: CAMEL-25534
URL: https://issues.apache.org/jira/browse/CAMEL-25534
Project: Camel
Issue Type: Bug
Components: camel-mail
Affects Versions: 4.22.1
Reporter: Federico Mariani
Follow-up to CAMEL-24848, which corrected the useHeader* descriptions on main
and camel-4.22.x. The description of the {{subject}} endpoint option was not
touched and still states the opposite of the actual behaviour since CAMEL-23747
made {{useHeaderSubject}} default to false.
h3. Reproduction
Catalog metadata for smtp (same in imap/imaps/pop3/pop3s/smtps), on
camel-4.22.1, camel-4.22.x and main:
{noformat}
"subject": { ... "description": "The Subject of the message being sent. Note:
Setting the subject in the header takes precedence over this option." }
"useHeaderSubject": { ... "defaultValue": false, ... }
{noformat}
A route that sets the header and leaves the URI without {{subject}}:
{code}
from("direct:a").setHeader("subject",
constant("Alert")).to("smtp://[email protected]");
{code}
sends a mail with an empty subject, because
{{MailBinding.appendHeadersFromCamelMessage}} only copies the Subject header
when {{configuration.isUseHeaderSubject()}} is true. With {{subject=X}} on the
URI and a Subject header, X wins, again the opposite of the note.
In an evaluation of coding agents (Claude Code and IBM Bob) on Mule-to-Camel
migration tasks, 25 sessions read this description through camel-jbang-mcp
4.22.1 ({{camel_catalog_component_doc smtp}}); at least one concluded from it
that the Subject header overrides the URI subject, and a mail sent with an
empty subject (Subject set only as a header) was the most frequent remaining
defect in the generated routes (10 sessions).
h3. Cause
*
{{components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java}},
javadoc of {{setSubject}}: "Note: Setting the subject in the header takes
precedence over this option."
* {{components/camel-mail/src/main/docs/mail-component.adoc}}, section on the
message content: "The subject of the MimeMessage can be configured using a
header property on the IN message" with a {{setHeader("subject", ...)}}
example, followed by "The same applies for other MimeMessage headers such as
recipients, so you can use a header property as To" and a ProducerTemplate
example with To/From/Subject headers. With the 4.22 defaults none of these
headers are used unless the matching useHeader* option is enabled.
* {{MailBinding.populateMailMessage}} code comments ("the headers win UNLESS
useHeaderSubject is set to false", same for replyTo) describe the old default.
h3. Fix
* Change the {{subject}} javadoc to something like: "The Subject of the message
being sent. The Subject message header is ignored unless useHeaderSubject=true,
in which case it overrides this option." and regenerate the component/catalog
JSON and the endpoint DSL builders.
* In mail-component.adoc, add {{useHeaderSubject=true}} (and
{{useHeaderRecipients=true}}/{{useHeaderFrom=true}} for the To/From example) to
the examples, or state next to them that the headers are only honoured when the
useHeader* options are enabled.
* Update the two comments in {{MailBinding.populateMailMessage}}.
Documentation only, no runtime change. A backport to camel-4.22.x alongside
CAMEL-24848 would keep the 4.22.2 catalog consistent.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)