Php Swiftmailer:主题电子邮件中缺少空格

Php Swiftmailer:主题电子邮件中缺少空格,php,email,swiftmailer,Php,Email,Swiftmailer,我正在使用SwiftMailer(v4.2.2)发送我的电子邮件,我最近观察到,当SwiftMailer构建电子邮件时,如果主题很长,它会在邮件标题中插入换行符 主题: Lorem ipsum dolor sit amet =?iso-8859-1?Q?consect=E9tur?= adipisicing elit 最初的主题是:Lorem ipsum dolor sit amet concertétur adipising elit 当我发送邮件时(使用Mandrill,甚至是本地SMTP

我正在使用
SwiftMailer(v4.2.2)
发送我的电子邮件,我最近观察到,当SwiftMailer构建电子邮件时,如果主题很长,它会在邮件标题中插入换行符

主题

Lorem ipsum dolor sit amet =?iso-8859-1?Q?consect=E9tur?=
adipisicing elit
最初的主题是:
Lorem ipsum dolor sit amet concertétur adipising elit

当我发送邮件时(使用Mandrill,甚至是本地SMTP服务器上的php邮件程序),我会收到主题为“Lorem ipsum dolor sit amet Concertification elit”的邮件

缺少空格,正好是在页眉中插入换行符的位置

我尝试了这个解决方案:在
classes/Swift/Mime/Headers/AbstractHeader.php
中删除函数
\r
中的
,但它似乎不起作用

有人能解决这个问题吗


提前感谢。

在他们的代码中,他们使用了lang

protected function getTokenAsEncodedWord($token, $firstLineOffset = 0)
{
    // Adjust $firstLineOffset to account for space needed for syntax
    $charsetDecl = $this->_charset;
    if (isset($this->_lang)) {
        $charsetDecl .= '*'.$this->_lang;
    }
主题另存为Swift\u Mime\u Headers\u无lang的非结构化header,因此此处为空

因此,我在Symfony 2中进行了工作修复:

$message->getHeaders()->get('subject')->setLanguage($this->container->get('session')->get('_locale', 'en'));
对于您来说,它的smt类似于:

$message->getHeaders()->get('subject')->setLanguage($yourLanguage);

当subject有两种或更多不同的语言时,就会出现这个问题,其中英语lang中的最后一个单词似乎存在一个问题,即Swiftmailer如何生成具有特殊字符的subject行,以及Mandrill的解析器如何处理这些字符。特别是,在特殊字符之后,任何换行符之前的空格似乎都将被Mandrill删除

原因是,当主题行标题拆分为两行时,第二行通常会缩进一个空格,因此这可能就是为什么在Mandrill解析消息后会删除空格的原因:swiftmailer仅在标题的第二行的特殊字符后放置一个空格

改变语言并不总是对我有用

此时,最简单(但丑陋)的修复方法是更改Swiftmailer将其头发送到Mandrill的方式

在lib/classes/Swift/Mime/Headers/AbstractHeader.php,第305行 替换

$header->setMaxLineLength(76)

帮我把一切都修好了


虽然建议的最大页眉长度为78个字符,但可以增加到998个字符(请参见)

也许这不仅仅是因为主题很长,还因为特殊字符?是的,但它似乎表明,即使某些字符按此处的方式编码,如果没有插入换行符,主题也不会中断
$header->setMaxLineLength(998)