问题描述
从 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".
,抛出
/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