CakePHP 4.x 定义 EmailTransport url 时出现 MissingTemplate 异常

CakePHP 4.x MissingTemplate Exception when EmailTransport url is defined

里面 app_local.php:

    'EmailTransport' => [
        'default' => [
            'className' => MailTransport::class,
            /*
             * The keys host, port, timeout, username, password, client and tls
             * are used in SMTP transports
             */
            'host' => 'localhost',
            'port' => 25,
            'timeout' => 30,
            /*
             * It is recommended to set these options through your environment or app_local.php
             */
            //'username' => null,
            //'password' => null,
            'client' => null,
            'tls' => false,
            'url' => 'myCompany-org.mail.protection.outlook.com'
        ],
    ],

目前,当我将 url 属性 设置为字符串时,应用程序崩溃并出现以下错误: 如果 url 的值为空,则应用程序不会崩溃。

Fatal error: Type of Cake\View\Exception\MissingTemplateException::$file must be string (as in class Exception) in C:\xampp\htdocs\creative_trak_2\vendor\cakephp\cakephp\src\View\Exception\MissingTemplateException.php on line 23

我认为这可能是路由问题,但我不知道 MailTransport 使用的任何路由。由于我使用的是 React Router,我的应用程序是单页应用程序,我的 routes.php 文件如下所示:

$routes->scope('/', function (RouteBuilder $builder) {
  
    // Single Page Application
    $builder->connect('/*', ['controller' => 'Pages', 'action' => 'main']);
    $builder->connect('/users/{action}', ['controller' => 'Users']);
    $builder->connect('/pages/*', 'Pages::display');
    $builder->fallbacks();
});

我检查了我的 logs 并没有出现任何错误。任何有关如何进一步调试它的建议都将不胜感激。

谢谢。

您看到的错误消息是因为您使用的 CakePHP 版本与您的 PHP 版本不兼容 (https://github.com/cakephp/cakephp/pull/15529).升级到最新的 4.x 以查看实际错误。

也就是说,这不是一个有效的 DSN 字符串,而 url 选项是要与之一起使用的。一个有效的 DSN 字符串至少包含一个架构和一个主机,例如:

smtp://smtp.example.com

对于您的外部主机,您当然很可能需要更多详细信息、用户名密码等...,一个更完整的示例是:

smtp://user:pass@smtp.example.com:587?tls=true

并不是说如果您想对内容进行硬编码,就需要在此处使用 DSN 字符串。不管怎样,先弄清楚你需要连接到 outlook 的详细信息,然后再从那里开始。

另见 https://book.cakephp.org/4/en/core-libraries/email.html#configuring-transports