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
里面 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