[ZendTo] Mail header bug on Ubuntu 22.04 / PHP 8.1

Jules Jules at Zend.To
Fri Nov 11 18:18:55 GMT 2022


Hi Adam,

Well spotted and well diagnosed!

I didn't think anyone still used the non-PHPMailer email code any more 
(it's just left there as it wasn't doing any harm and meant people 
weren't forced into any reconfiguration of existing old servers).
But clearly I woz rong! :-)

I'll take a look at this and get it fixed for you.

BTW why still using the inbuilt php mail() function rather than PHPMailer?

Cheers,
Jules.

On 11/11/2022 18:07, Adam Thorn via ZendTo wrote:
> I'm working on deploying ZendTo to a new Ubuntu 22.04 server. My 
> current ZendTo instance is on Ubuntu 18.04: in both cases I'm using 
> the stock Ubuntu-provided PHP packages, so am moving from PHP 7.4 to 
> PHP 8.1. I'm also moving from ZendTo 5.17-6 to 6.13-2 but I don't 
> think that change is too relevant, as the bug I've spotted is in code 
> which is identical between those ZendTo versions.
>
> The specific problem I've spotted is in NSSDropbox.php : there may be 
> similar problems elsewhere. I don't use phpmailer so am looking at the 
> code path through deliverEmail() which ends in a call to PHP's mail() 
> function.
>
> On the older PHP7.4 server, when I make a dropoff which in turn sends 
> a mail, everything about the mail is fine, and when I view the mail 
> headers in Thunderbird I see e.g.
>
> From: ZendTo Service <no-reply at cam.ac.uk>
> Reply-to: alt36 at cam.ac.uk
> Content-Type: text/plain; charset=UTF-8; format=flowed
> Content-Transfer-Encoding: 8bit
>
> However, making a similar dropoff on PHP8.1 the equivalent header 
> lines read...
>
> From: ZendTo Service <no-reply at cam.ac.uk>
>  Reply-to: alt36 at cam.ac.uk
>  Content-Type: text/plain; charset=UTF-8; format=flowed
>  Content-Transfer-Encoding: 8bit
>
> i.e. there's an extra leading space on the lines after From: which are 
> generated within deliverEmail(). This is invalid, and leads to my mail 
> client displaying a mangled From: which is the concatenation of the 
> above four lines, and with no Reply-To set (and presumably ignoring 
> Content-Type etc as well)
>
> I note the same code block would also generate the bcc: header lines 
> if needed, so I suspect this bug would also lead to the bcc: 
> recipients being ignored, but I haven't experimented there.
>
> My minimal demo of the problem, and then also what I believe is the 
> fix, is....
>
> # begin demo, following the code used in deliverEmail()
>
> $headers = '';
>
> $to = 'alt36 at cam.ac.uk';
> $sender = 'no-reply at example.com';
>
> $subject = 'Test subject';
> $content = 'This is a test email';
>
> $fromAddr = 'sender at example.com';
>
> $headers = sprintf("From: %s", $sender) . PHP_EOL .
> sprintf("Reply-to: %s", $fromAddr) . PHP_EOL . $headers;
> $headers .= "MIME-Version: 1.0".PHP_EOL;
> $headers .= "Content-Type: text/plain; charset=UTF-8; 
> format=flowed".PHP_EOL;
> $headers .= "Content-Transfer-Encoding: 8bit".PHP_EOL;
>
> mail($to, $subject, $content, $headers);
>
> # end demo
>
> The problem is the use of PHP_EOL, which of course on my Ubuntu system 
> is the LF character. However, the PHP docs 
> https://www.php.net/manual/en/function.mail.php state that the 
> $headers need to be separated by CRLF. The use of CRLF is also 
> specified e.g. in RFC 2822.
>
> If I replace the PHP_EOL uses in my example above with literal "\r\n" 
> strings, the unwanted leading spaces in the headers of the sent mail 
> disappear and my mail client displays everything as I'd expect.
>
> Given the above, I speculate that there's been a change in the 
> behaviour of mail() between the PHP versions but haven't gone 
> searching through changelogs. I also haven't attempted to understand 
> why the use of just PHP_EOL leads to those extra leading spaces 
> appearing - that may just be an artefact of how my mail client ends up 
> displaying a string with embedded LF characters when it's expecting 
> CRLF, though. And, I've not looked more widely to see if there are 
> other places in ZendTo with the same issue.
>
> Regards,
>
> Adam
>
> _______________________________________________
> ZendTo mailing list
> ZendTo at zend.to
> http://jul.es/mailman/listinfo/zendto

Jules

-- 
Julian Field MEng CEng CITP MBCS MIEEE MACM

'It's okay to live without all the answers' - Charlie Eppes, 2011

www.Zend.To
Twitter: @JulesFM
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://jul.es/pipermail/zendto/attachments/20221111/dcb038e1/attachment.html>


More information about the ZendTo mailing list