邮件程序保存后不在CakePHP 3中发送电子邮件

时间:2017-05-02 12:47:08

标签: cakephp mailer cakephp-3.4

我在CakePHP 3.4中工作

我已将Mailer设置为在注册后向用户发送验证邮件。

/src/Mailer/UserMailer.php

<?php
namespace App\Mailer;

use Cake\Mailer\Mailer;

class UserMailer extends Mailer
{
    public function verify($user)
    {
        $this
            ->setProfile('no-reply')
            ->setTemplate('register')
            ->setLayout('authentication')
            ->setEmailFormat('html')
            ->setTo($user->email)
            ->setSubject('Verify Account')
            ->setViewVars(['name' => $user->first_name, 'email' => $user->email, 'hash' => $user->verification_hash]);
    }

    public function implementedEvents()
    {
        return [
            'Model.afterSave' => 'onRegistration'
        ];
    }

    public function onRegistration(Event $event, EntityInterface $entity, ArrayObject $options)
    {
        if ($entity->isNew()) {
            $this->send('verify', [$entity]);
        }
    }
}

但是,它没有发送任何电子邮件。

使用

手动从控制器触发时发送电子邮件
$this->getMailer('User')->send('verify', [$user]);

1 个答案:

答案 0 :(得分:0)

请检查onRegistration方法是否被解雇。我认为你必须实施Cake\Event\EventListenerInterface

请参阅docs

use Cake\Event\EventListenerInterface;

class UserMailer extends Mailer implements EventListenerInterface
{
    ...
}

修改:好的,请忽略我 - 刚刚发现Mailer类已经在侦听事件。

https://api.cakephp.org/3.4/class-Cake.Mailer.Mailer.html