Andrea Cosentino created CAMEL-24344:
----------------------------------------
Summary: camel-google-mail: raw option always returns a null body
and non-multipart messages produce no body
Key: CAMEL-24344
URL: https://issues.apache.org/jira/browse/CAMEL-24344
Project: Camel
Issue Type: Bug
Components: camel-google-mail-stream
Reporter: Andrea Cosentino
Assignee: Andrea Cosentino
{{GoogleMailStreamConsumer}} always requests the FULL format:
{code:java}
// GoogleMailStreamConsumer.java:95
Message mess = getClient().users().messages().get("me",
message.getId()).setFormat("FULL").execute();
{code}
but the {{raw}} option then reads a field the Gmail API only populates for
{{format=RAW}}:
{code:java}
// GoogleMailStreamConsumer.java:190-191
if (getConfiguration().isRaw()) { message.setBody(mail.getRaw()); }
{code}
so {{raw=true}} always produces a null body. See
https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages
- "Returned in messages.get and drafts.get responses when the format=RAW
parameter is supplied."
The non-raw path only handles multipart messages:
{code:java}
// GoogleMailStreamConsumer.java:193-198
List<MessagePart> parts = mail.getPayload().getParts();
if (parts != null && parts.get(0).getBody().getData() != null) { ... }
{code}
A plain (non-multipart) mail has {{getParts() == null}} and its content in
{{getPayload().getBody().getData()}}, so the body is silently left unset.
{{mail.getPayload()}} and {{getPayload().getHeaders()}} (:200) are also
dereferenced without a null check.
Minor: {{processRollback}} (:169-181) adds the UNREAD label back even when
{{markAsRead}} is false, and its catch block reports "Error occurred mark as
read mail" for a rollback failure.
Found during a source audit of the {{components/camel-google}} module family
against main @ c3b01310be15.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)