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)