CakePHP 邮件程序“未知的电子邮件配置”错误

问题描述

从 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".,抛出

error

两个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,特别是关于 EmailTransportEmail 的消耗方式,这是在 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...