Ticket #5204 (new defect)

Opened 9 months ago

Last modified 9 months ago

wp_mail Does Not Detect Custom Boundaries in "Multipart/Mixed" Email Headers

Reported by: Ghidra99 Assigned to: anonymous
Priority: normal Milestone: 2.6
Component: General Version: 2.3
Severity: major Keywords: wp_mail, email, multipart, mixed, header, boundary
Cc:

Description

There is a problem with the new wp_mail function.

If an email is sent to wp_mail() with a custom header of "Content-Type: multipart/mixed; boundary="frontier"", wp_mail() is a) not recognizing that a custom boundary has been set and b) using that custom boundary (in this case, "frontier") as the email character set (charset). This is producing malformed subject lines and messages in emails with non-western characters.

For example, PluginX sends an email to wp_mail(). The email's headers are formed correctly:

To: xxx@xxx.org
Subject: =?UTF-8?B?0KHRgNC/0YHQutC4INCa0YPQu9GC?=
Date: Mon, 15 Oct 2007 10:04:34 -0500
From: "xxx@xxx.org" <xxx@xxx.org>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="frontier"

--frontier
Content-Type: text/plain; charset = "UTF-8"
Content-Transfer-Encoding: 8bit

Attached to this email is
   xxx.sql.gz
   Size:82 kilobytes

--frontier
Content-Type: application/octet-stream; name="xxx.sql.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="xxx.sql.gz"

H4sIAAAAAAAAA5yMQQrCMBRE9znFQNdKWhQhWwu6sKgouLQ/yYeCNSn5UentzcITOLt585gKt5j8
--frontier

wp_mail() explodes and parses the email headers, incorrectly ascribing "frontier" as the Charset while assigning its own boundary:

To: xxx@xxx.org
Subject: =?frontier?B?0KHR?=  =?frontier?B?gNC/?=  =?frontier?B?0YHQ?=  =?frontier?B?utC4?=  =?frontier?B?INCa?=  =?frontier?B?0YPQ?=  =?frontier?B?u9GC?=
Date: Mon, 15 Oct 2007 10:04:34 -0500
From: "xxx@xxx.org" <xxx@xxx.org>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="b1_49700ab183d95dd1680e0898d750b958"

--b1_49700ab183d95dd1680e0898d750b958
Content-Type: text/plain; charset = "frontier"
Content-Transfer-Encoding: 8bit

Attached to this email is
   xxx.sql.gz
   Size:82 kilobytes

--b1_49700ab183d95dd1680e0898d750b958
Content-Type: application/octet-stream; name="xxx.sql.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="xxx.sql.gz"

H4sIAAAAAAAAA5yMQQrCMBRE9znFQNdKWhQhWwu6sKgouLQ/yYeCNSn5UentzcITOLt585gKt5j8
--b1_49700ab183d95dd1680e0898d750b958

PluginX's once correctly-formed email is now severely broken, using PluginX's custom boundary as a charset.

Attachments

test_email.txt (2.4 kB) - added by filosofo on 10/15/07 18:27:54.
email_fix.diff (2.2 kB) - added by filosofo on 10/15/07 18:28:22.

Change History

10/15/07 18:27:25 changed by filosofo

The problem is that wp_mail assumes the content-type is text, and it ends up thinking the boundary is the text encoding, or it ignores the boundary altogether.

My patch fixes wp_mail so that one can send attachments using custom headers.

I've also attached a test email message. Send it to yourself using sendmail, e.g. sendmail [name]@[domain].com < test_email.txt

and it works.

Try to send it using wp_mail, with the 2-4 lines as custom headers, and it currently fails.

Apply my patch, then try sending it via wp_mail, and it works.

10/15/07 18:27:54 changed by filosofo

  • attachment test_email.txt added.

10/15/07 18:28:22 changed by filosofo

  • attachment email_fix.diff added.

10/17/07 20:10:28 changed by westi

  • milestone changed from 2.3.1 to 2.4.

Not a candidate for 2.3.1 moving to 2.4 for now.