flarum社区的邮件发送只有纯文本的,没法发送html模板的,这样会显得很low。而且被邮箱接受者系统标识为垃圾邮件的可能性很大,所以还是急需一个html模板的。由于知识有限,时间有限,就简单修改源码了,使得发邮件能用上html。
##步骤
1.打开vendor/jsthon/flarum-ext-simplified-chinese/core.yml文件。
修改activate_account的body: //activate_account是激活邮箱,confirm_email是更换邮箱地址,reset_password是重置密码
嘿~
{username} 想通过这个邮箱在 {forum} 注册账号。(真希望是你!) //username是注册名,forum是论坛名字
如果是你注册的,只需打开下面的链接即可完成账号激活。
{url} //url是激活地址
如果你感到莫名其妙,请忽略这封邮件。
将此处的文字修改成你想要放置的html邮箱模板。
2. 修改vendor/flarum/core/src/Api/Controller/SendConfirmationEmailController.php
修改下面代码:
$this->mailer->raw($body, function (Message $message) use ($actor, $data) {
$message->to($actor->email);
$message->subject('['.$data['{forum}'].'] '.$this->translator->trans('core.email.activate_account.subject'));
});
改成:
$this->mailer->send(['html' => $body], [], function (Message $message) use ($actor, $data) {
$message->to($actor->email);
$message->subject('['.$data['{forum}'].'] '.$this->translator->trans('core.email.activate_account.subject'));
因为raw方法发送的内容最后录入的type是'text/plain',所以修改发送的方式,直接指定为html。
3. 修改vendor/illuminate/mail/Mailer.php
164行:
$data['message'] = $message = $this->createMessage();
$this->addContent($message, $view, $plain, $raw, $data);
改成:
$message = $this->createMessage();
$this->addContent($message, $view, $plain, $raw, $data);
$data['message'] = $message;
修改addContent方法内的:
$message->setBody($this->getView($view, $data), 'text/html');
改成:
if ($data) {
$message->setBody($this->getView($view, $data), 'text/html');
} else {
$message->setBody($view, 'text/html');
}
这里的$this->getView($view, $data),不知道view模板位置在哪里,导致报错。原本不想改这个的,实在没法,就直接改动了。如果没传$data,这里的$view不再是模板名称,而是直接渲染完成的html模板了。
到此就能发送html模板的邮件啦。
想体验一下吗?来这里。