Octobercms 中的 Mail::send 从 richeditor 中删除 HTML 标签的原因可能是什么?
What can be the reason why Mail::send in Octobercms cuts the HTML tags from richeditor?
我正在使用 Mail::send 服务从联系表发送电子邮件。电子邮件的正文是 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 条带化的消息,并且仅发送 第一个标签 (例如:<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>";
知道如何从 richeditor 发送整个 HTML 吗?我应该在 richeditor 还是在 Mail 中配置一些东西?
我调试了很多,发现 HTML 是由 Markdown
解析的,它没有链接单行内容,只保留第一个 tag
.
UPDATE - as per OctoberCMS 2.0 Docs
需要注意的是,Markdown 解析器每行只接受一个 HTML 节点。
参考: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']);
});
OR as per @SamuelGeorges you can wrap your message within <div>
tag.
Now it should work as expected.
如有疑问请评论。
这是 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>
我正在使用 Mail::send 服务从联系表发送电子邮件。电子邮件的正文是 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 条带化的消息,并且仅发送 第一个标签 (例如:<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>";
知道如何从 richeditor 发送整个 HTML 吗?我应该在 richeditor 还是在 Mail 中配置一些东西?
我调试了很多,发现 HTML 是由 Markdown
解析的,它没有链接单行内容,只保留第一个 tag
.
UPDATE - as per OctoberCMS 2.0 Docs
需要注意的是,Markdown 解析器每行只接受一个 HTML 节点。
参考: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']);
});
OR as per @SamuelGeorges you can wrap your message within
<div>
tag.
Now it should work as expected.
如有疑问请评论。
这是 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>