【问题标题】:CakePHP Mailer "Unknown email configuration" errorCakePHP Mailer “未知的电子邮件配置”错误
【发布时间】:2021-08-10 21:29:48
【问题描述】:

从 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',
        ],
    ],
];

这是导致错误的 sn-p:

    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 键似乎存在于邮件配置中,那为什么会出现此错误?

【问题讨论】:

    标签: php cakephp php-7 cakephp-4.x


    【解决方案1】:

    确保你已经相应地升级了你的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

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 2014-07-07
      • 1970-01-01
      • 2015-08-22
      • 2018-07-07
      • 2011-07-30
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多