首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Mail::会减少richeditor的HTML标记呢?

为什么Mail::会减少richeditor的HTML标记呢?
EN

Stack Overflow用户
提问于 2021-12-07 14:29:16
回答 2查看 69关注 0票数 1

我正在使用邮件::发送服务,以发送电子邮件从联系表格。电子邮件的正文是HTML,并提供了richeditor。我有一个模板'my.plugin::mail.default':

代码语言:javascript
复制
subject = "Overwritten"
==
<p>Hi {{ name }},</p>

{{message_body | raw}}

<p>This email was sent using formatting (HTML)</p>

发送的代码是这样的:

代码语言:javascript
复制
$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 )时,它就被剪切了。

代码语言:javascript
复制
$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从轮盘手那里发送出去吗?我应该在轮询者或邮件中配置某个东西吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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解析期间保持不变。

代码语言:javascript
复制
$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>标记中。现在,它应该能像预期的那样起作用。

如有任何疑问,请评论。

票数 1
EN

Stack Overflow用户

发布于 2021-12-09 22:44:50

这是Markdown解析器的一个怪癖,当它在同一行上看到两个或多个HTML节点时,它将只捕获第一个节点(每行一个节点)。

代码语言:javascript
复制
// Outputs: <p>hello</p>
<p>hello</p><p>yo</p>

为了克服这个问题,我们应该告诉Markdown,它应该通过将所有内容封装在一个节点中来期望HTML。

代码语言:javascript
复制
// Outputs: <div><p>hello</p><p>yo</p></div> 
<div><p>hello</p><p>yo</p></div>

解决方案是将原始HTML语句包装在标记中。

代码语言:javascript
复制
<div>
    {{message_body|raw}}
</div>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70261949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档