【问题标题】:Swiftmailer: Missing space in subject emailSwiftmailer:主题电子邮件中缺少空格
【发布时间】:2015-04-23 06:11:33
【问题描述】:

我正在使用SwiftMailer (v 4.2.2) 发送我的电子邮件,我最近观察到,当 SwiftMailer 构造一封电子邮件时,如果它的主题很长,它会在邮件的标题中插入换行符。

主题

Lorem ipsum dolor sit amet =?iso-8859-1?Q?consect=E9tur?=
adipisicing elit

原来的主题是:Lorem ipsum dolor sit amet consectétur adipisicing elit

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

空格不见了,就在表头插入换行符的地方

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

有人对此有解决方案吗?

提前致谢。

【问题讨论】:

  • 也许不仅仅是因为主题很长,还因为特殊字符?
  • 是的,但是看起来即使有些字符像这里这样编码,如果没有插入换行符,主题也不会被打破

标签: php email swiftmailer


【解决方案1】:

Swiftmailer 如何生成具有特殊字符的主题行以及 Mandrill 的解析器如何处理这些似乎存在问题。具体来说,Mandrill 似乎会删除特殊字符后任何换行符之前的空格。

原因是当主题行标题被分成两行时,第二行缩进一个空格,所以这很可能是为什么一旦 Mandrill 解析了您的消息就会看到空格被删除的原因: swiftmailer 仅在标题的第二行特殊字符后放置一个空格。

更改语言并不总是适合我。

目前,最简单(但丑陋)的解决方法是更改​​ Swiftmailer 将其标头发送到 Mandrill 的方式。

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

$header->setMaxLineLength(76)

通过

$header->setMaxLineLength(998)

为我解决了所有问题。

虽然建议的最大标头大小为 78 个字符,但最多可以达到 998 个字符(请参阅RFC 2822 section 2.2.3

【讨论】:

    【解决方案2】:

    在他们的代码中他们使用 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;
        }
    

    主题保存为没有 lang 的 Swift_Mime_Headers_UnstructuredHeader,所以那里是 NULL。

    所以我在 Symfony 2 中进行了工作修复:

    $message->getHeaders()->get('subject')->setLanguage($this->container->get('session')->get('_locale', 'en'));
    

    对你来说,它就像:

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

    当主题有 2 种或更多不同的语言时会出现此问题,其中最后一个单词是英文 lang

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 2012-01-03
      • 2011-12-25
      相关资源
      最近更新 更多