更新到 v6.10、6.11 后,我无法再从 Laravel 应用程序发送电子邮件。我没有更改任何代码,最近也没有要求或删除 Composer 中的任何新内容。这似乎可能是 Laravel 新版本的问题,因为这段代码在 v6.7 及更低版本上可以正常运行并发送电子邮件。
错误消息:
Class 'League\CommonMark\Environment' not found (View: /home/ww/app/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/footer.blade.php)
{"exception":"[object] (Facade\Ignition\Exceptions\ViewException(code: 0): Class 'League\CommonMark\Environment' not found (View: /home/ww/app/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/footer.blade.php) at /home/videocyp/app/vendor/laravel/framework/src/Illuminate/Mail/Markdown.php:103)
导致问题的供应商文件中的页脚行:
{{ Illuminate\Mail\Markdown::parse($slot) }}
在供应商文件Markdown.php内
use League\CommonMark\Environment;
class Markdown
{
public static function parse($text)
{
$environment = Environment::createCommonMarkEnvironment();
// etc...
}
查看League\CommonMark\Environment
,我找到了该类(就像我的 IDE 一样):
final class Environment implements EnvironmentInterface, ConfigurableEnvironmentInterface { }
我无法理解为什么 Laravel 无法看到它的供应商类之一。
有谁能帮忙吗?
最佳答案
事实证明,这是从 v6.10 开始对 Laravel 构建进行重大(稍微破坏性)更改的结果。
由于潜在的 XSS 漏洞,他们似乎将根解析器更改为 League CommonMark。由于在新的 CommonMark 解析器中对多余的空白进行不同的解析,这会导致现有电子邮件发布模板出现其他问题。已报告错误 here , here , here .
我的特殊问题非常奇怪,但除了向 Laravel 报告的问题之外,其他地方也报告了该问题。我的服务器之间的情况不一致,但完全重建(vagrant)解决了这个问题。
对于之前发布的电子邮件模板显示原始 HTML 的其他人,如果幸运且未对模板进行任何更改,重新发布可能会解决问题。
关于Laravel 更新后看不到现有的供应商类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59743551/