I’ve been trying to resolve this with Claude as well, here is Claudes summary for what its worth:
Gmail “Send an email” module produces a malformed message: multipart body declared as text/plain
The module builds a complete multipart/alternative document — text alternative, boundary, HTML part, closing boundary — but sets the outer header to:
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
There is no multipart/alternative and no boundary= parameter. The MIME structure therefore ends up as literal text inside a single plain-text part. Decoded body:
New Qualified Lead Received
Name:pete
...
--boundary_1788438207
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: 7bit
<html>
<body>
<h3>New Qualified Lead Received</h3>
...
</body>
</html>
--boundary_1788438207--
Four things worth noting:
The module generates the text alternative itself — it’s the HTML with tags stripped — so it is genuinely attempting multipart and only failing to declare it.
The boundary is a unix timestamp (boundary_1788438207 = 2026-09-03 11:43:27 UTC), rather than the random string a standard MIME library emits.
Both Body type options produce byte-identical output — Raw HTML and Collection of contents (text, images, etc.). There is no configuration that avoids it.
Client behaviour differs, and this is why it’s easy to miss: desktop clients render it as text/plain exactly as the header instructs, so the plumbing is visible. Mobile clients sniff the HTML and render it anyway. The desktop rendering is correct; mobile is being lenient. Verifying on a phone gives a false pass.
Regression: the same scenario, unchanged, rendered correctly previously. No configuration was edited between working and broken.
Workaround attempted: switching to Make’s generic Email (SMTP) module is blocked — “Common SMTP connection can’t be used for Google accounts because of the different authorization methods” — which forces you back to the affected module.