From 9867d70facb1ebc11cfb04c5ecf9af3ea93b4307 Mon Sep 17 00:00:00 2001 From: Thomas Hochstein Date: Sun, 13 Oct 2019 13:15:27 +0200 Subject: [PATCH] Fix mangling of auto-generated mails. s9y will encode the body of its auto-generated mails as quoted-printable when imap_8bit() is available. imap_8bit() will use "\r\n" as linebreaks as mandated for SMTP transfer. The result will be transmitted via PHP's mail() function, using direct SMTP on Windows and piping it to a MTA on Unix. Most MTAs will cope just fine with those linebreaks, while qmail will not; it will replace all "\n" linebreaks with "\r\n", so we get "\r\r\n" in our case. We can't "fix" qmail (as its maintainer, if there even is one, does not consider this behaviour wrong), but we can replace the line endings we get from imap_8bit(). The fix does work with qmail and Exim and should work with sendmail and Postfix and other MTAs, too. It may break sending mail on Windows (i.e. lose all linebreaks), but I think that's acceptable, as we'll have more qmail installation than Windows servers out there. A workaround could be to set serendipity['forceBase64']=true in serendipity_config_local.inc.php, but I'd prefer this fix. Fixes #644. Signed-off-by: Thomas Hochstein --- include/functions.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/functions.inc.php b/include/functions.inc.php index eb72a607..545484e7 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -538,7 +538,7 @@ function serendipity_sendMail($to, $subject, $message, $fromMail, $headers = NUL if (LANG_CHARSET == 'UTF-8') { if (function_exists('imap_8bit') && !$serendipity['forceBase64']) { $maildata['headers'][] = 'Content-Transfer-Encoding: quoted-printable'; - $maildata['message'] = imap_8bit($maildata['message']); + $maildata['message'] = str_replace("\r\n","\n",imap_8bit($maildata['message'])); } else { $maildata['headers'][] = 'Content-Transfer-Encoding: base64'; $maildata['message'] = chunk_split(base64_encode($maildata['message']));