我正在使用邮件::发送服务,以发送电子邮件从联系表格。电子邮件的正文是HTML,并提供了richeditor。我有一个模板'my.plugin::mail.default':
subject = "Overwritten"
==
<p>Hi {{ name }},</p>
{{message_body | raw}}
<p>This email was sent using formatting (HTML)</p>发送的代码是这样的:
$data=post();
$vars = [
'subject' => $data['subject'],
'message_body' =>$data['message'],
'name'=>'STB '
];
Mail::send('my.plugin::mail.default', $vars, function ($message) use ($vars) {
$message->to("reciever@email.com");
$message->subject($vars['subject']);
});以这种方式发送的电子邮件具有HTML消息条,并且只发送第一个标记 (ex:<p>abc<p/>)。
经过多次测试后,我发现当HTML具有新的行字符\n (如下面的var $html )时,Mail::send正确地发送消息。但是,当HTML没有新的行字符(如下面的var $html_richeditor )时,它就被剪切了。
$html = '<p>Aenean finibus erat eget maximus luctus. Phasellus vitae lectus dolor. Morbi convallis ex et turpis porttitor mattis morbi convallis ex et turpis porttitor mattis</p>
<p>Proin porta, nibh eget elementum aliquet, metus elit viverra nisi, vitae ullamcorper elit eros ut urna.</p>
<br/><br><p>Morbi convallis ex et turpis porttitor mattis.</p>';
$html_richeditor = "<p>Aenean finibus erat eget maximus luctus. Phasellus vitae lectus dolor. Morbi convallis ex et turpis porttitor mattis morbi convallis ex et turpis porttitor mattis</p><p>Proin porta, nibh eget elementum aliquet, metus elit viverra nisi, vitae ullamcorper elit eros ut urna.</p><p><br></p><p><br></p><p>Morbi convallis ex et turpis porttitor mattis.</p>";你知道我怎么才能把整个HTML从轮盘手那里发送出去吗?我应该在轮询者或邮件中配置某个东西吗?
发布于 2021-12-07 17:35:48
我已经调试了很多,并发现HTML是由Markdown解析的,它没有链接到单行内容,只保留了第一个tag。
更新-根据OctoberCMS 2.0文档
需要注意的是,标记解析器每一行只接受一个节点。
参考文献:https://docs.octobercms.com/2.x/services/parser.html#using-html-in-markdown
因此,我们需要使我们的HTML像每一行的一个节点。我们只需将\n附加到所有标记的结束>括号中,以便它在Markdown解析期间保持不变。
$data=post();
$vars = [
'subject' => $data['subject'],
'message_body' => strtr($data['message'], ['>' => ">\n"]),
// replacing `>` with `>\n` please use double quote with `\n`
'name'=>'STB '
];
Mail::send('my.plugin::mail.default', $vars, function ($message) use ($vars) {
$message->to("reciever@email.com");
$message->subject($vars['subject']);
});或者,如@SamuelGeorges所示,您可以将消息包装在
<div>标记中。现在,它应该能像预期的那样起作用。
如有任何疑问,请评论。
发布于 2021-12-09 22:44:50
这是Markdown解析器的一个怪癖,当它在同一行上看到两个或多个HTML节点时,它将只捕获第一个节点(每行一个节点)。
// Outputs: <p>hello</p>
<p>hello</p><p>yo</p>为了克服这个问题,我们应该告诉Markdown,它应该通过将所有内容封装在一个节点中来期望HTML。
// Outputs: <div><p>hello</p><p>yo</p></div>
<div><p>hello</p><p>yo</p></div>解决方案是将原始HTML语句包装在标记中。
<div>
{{message_body|raw}}
</div>https://stackoverflow.com/questions/70261949
复制相似问题