Swiftmailer为text / plain模板添加了换行符

时间:2016-11-29 09:18:11

标签: php swiftmailer fluid

我使用contract.txt作为文本/普通电子邮件的模板:

Eine Bestellung wurde gesendet:

Vertragspartner: {contract.formData.customer}
Zweiter Vertragspartner: {contract.formData.secondCustomer}

Anschrift:
{contract.formData.address}
{contract.formData.zipCity}

...

standaloneView呈现,生成以下字符串:

Eine Bestellung wurde gesendet:

Vertragspartner: Herr Max Mustermann (11.11.1991)
Zweiter Vertragspartner: Nein

Anschrift:
Holzweg 13 Holzweg 13
90909 Bielefeld

...

这是预期的结果 但是,当我致电setBody($message, 'text/plain');时,swiftmailer会在邮件中插入新的换行符和=

Eine Bestellung wurde gesendet:

Vertragspartner: Herr Max Mustermann (=
11.11.1991)
Zweiter Vertragspartner: Nein

Anschrift:
Holzweg 13 Ho=
lzweg 13
90909 Bielefeld

...

看起来swiftmailer试图强制执行76个字符的行限制,而不考虑现有的换行符,它们仍在那里。 然而,类似问题的答案表明这个问题很久以前就已得到解决。

以下是我用于在TYPO3 Neos插件中使用SwiftMailer 5.4.2创建电子邮件的代码:

$standaloneView = new StandaloneView();
$standaloneView->setTemplatePathAndFilename('resource://[...]/Contract.txt');
$standaloneView->assign('contract', $contract);
$message = $standaloneView->render();

$mail = new Message();
$mail->setFrom([$formData['email'] => $formData['lastname']])
  ->setTo([
    $this->request->getInternalArgument('__mailRecipientAddress') => $this->request->getInternalArgument('__mailRecipientName')
  ])
  ->setSubject($this->request->getInternalArgument('__mailSubject'))
  ->setBody($message, 'text/plain');

为了让SwiftMailer能够识别我现有的换行符,需要做些什么?

1 个答案:

答案 0 :(得分:1)

我找到了阻止此错误的方法,但它没有解决它。

standaloneView使用LF (\n)为换行创建模板,而setBody()尝试将所有换行标准化为CRLF (\r\n),但显然失败了。

所以我只是使用str_replace()来做这件事。该消息现在由

定义
$message = str_replace("\n", "\r\n", $standaloneView->render());

而不是$message = $standaloneView->render();

我很确定,这是一个更好的方法来解决问题,但这修复了我的电子邮件,所以我将它留在这里。