我使用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能够识别我现有的换行符,需要做些什么?
答案 0 :(得分:1)
我找到了阻止此错误的方法,但它没有解决它。
standaloneView使用LF (\n)
为换行创建模板,而setBody()
尝试将所有换行标准化为CRLF (\r\n)
,但显然失败了。
所以我只是使用str_replace()
来做这件事。该消息现在由
$message = str_replace("\n", "\r\n", $standaloneView->render());
而不是$message = $standaloneView->render();
我很确定,这是一个更好的方法来解决问题,但这修复了我的电子邮件,所以我将它留在这里。