php - CakePHP Mailer “未知的电子邮件配置”错误
问题描述
从 CakePHP 3 升级到 4 后,Mailer 出现问题。这是我的配置的相关部分:
<?php
return [
'EmailTransport' => [
'default' => [
'className' => 'Mail',
'host' => 'localhost',
'port' => 25,
'timeout' => 30,
'username' => 'user',
'password' => 'password',
'client' => null,
'tls' => null,
'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
],
'cronjob' => [
'className' => 'Mail',
],
'accounts' => [
'className' => 'Mail',
],
],
'Email' => [
'default' => [
'transport' => 'default',
'from' => 'you@localhost',
],
'cronjob' => [
'transport' => 'cronjob',
'from' => 'cronjob@foobar.com',
],
'accounts' => [
'transport' => 'accounts',
'from' => 'accounts@foobar.com',
],
],
];
这是导致错误的代码段:
private function sendActivationEmail(User $user)
{
$url = Router::url([
'prefix' => 'Admin',
'plugin' => 'UserManager',
'controller' => 'Users',
'action' => 'activate',
$user->username,
$user->activation_key,
], true);
debug(Configure::read('EmailTransport'));
debug(Configure::read('Email'));
$mailer = new Mailer('accounts');
$mailer->setFrom(['accounts@foobar.com' => 'Foobar Website Manager'])
->setTo($user->email, $user->fullName)
->setSubject('Please activate your account')
->setEmailFormat('html')
->setViewVars(compact('url', 'user'))
->viewBuilder()
->setTemplate('UserManager.register');
return $mailer->deliver();
}
错误是Unknown email configuration "accounts".
,抛出
这两个debug
函数的输出如下:
/vendor/plugins/usermanager/src/Model/Table/UsersTable.php (line 72)
[
'default' => [
'className' => 'Mail'
],
'cronjob' => [
'className' => 'Mail'
],
'accounts' => [
'className' => 'Mail'
]
]
/vendor/plugins/usermanager/src/Model/Table/UsersTable.php (line 73)
[
'default' => [
'transport' => 'default',
'from' => 'something@foobar.com'
],
'cronjob' => [
'transport' => 'cronjob',
'from' => 'cronjob@foobar.com'
],
'accounts' => [
'transport' => 'accounts',
'from' => 'accounts@foobar.com'
]
]
因此,邮件配置中似乎accounts
存在密钥,那么为什么会出现此错误?
解决方案
确保您在bootstrap.php
此过程中相应地升级了您的产品,特别是关于如何EmailTransport
和Email
正在使用的,如果我没记错的话,这是在 CakePHP 3.7 和 4.1 中引入的:
TransportFactory::setConfig(Configure::consume('EmailTransport'));
Mailer::setConfig(Configure::consume('Email'));
https://github.com/cakephp/app/blob/4.2.2/config/bootstrap.php#L163-L164
推荐阅读
- c - 像 linux 命令一样的 C 行对齐
- c++ - 来自三个 XYZ 向量的 vtkStructuredGrid 的 VTK C++ 设置点
- react-router - 如何在反应路由器中加载进入下一个路由之前避免闪烁?
- python - Python:检查最后一个字符串的函数
- android - Android ClassCastException同时在另一个片段中实现TimePickerDialog.OnTimeSetListener接口的onTimeSet方法
- javascript - 如何在javascript函数中为参数的特定默认值设置值
- mysql - minikube部署mysql失败...镜像拉取失败..ubuntu环境
- azure-functions - 如何独立使用存储帐户名称和容器名称环境
- c# - 统一生成一个空的tilemap
- unit-testing - Clojure.spec:基于生成器中其他字段的字段存在