How to test UTF-8 email subject lines in Symfony
One of our clients needs to send emails with UTF-8 subject lines. Swift Mailer, which Symfony uses, makes this easy to do, but writing functional tests for it is another story. The problem is that, if non-ASCII characters are present in the subject line, Swift Mailer encodes them as required by RFC 2047 for example, a string like “Transformación” turns into “=?utf-8?Q?Transformaci=C3=B3n?=”. How do we know that this is the right subject line?
There’s no immediately-available “convert this into a RFC 2047-compliant subject line” function, but we can get around this by making use of Swift_Message->toString
and some choice preg functions.
First, create a dummy message containing the appropriate header. Swift_Message->toString()
will contain our encoded header:
Next, we have to extract our encoded header I’ve used preg_match()
and a fairly simple regex.
Finally, now that the encoded header has been extracted, we need only wrap it in preg_quote()
(because checkHeader()
uses regex syntax) and test away.
Voila - now we can be confident that our test script can deal with Unicode email subjects. If you can think of a way to make this simpler, or more robust, let me know in the comments.