全局覆盖CakeEmail目标

时间:2016-12-01 01:01:54

标签: php cakephp cakephp-2.0

是否有一种使用CakeEmail“覆盖”电子邮件目的地的简单方法?

我有一个使用这段代码发送电子邮件的模型方法:

$Email = new CakeEmail();
$Email->config('default');
$sent = $Email->template('new-notification')
              ->subject('A new notification for you')
              ->viewVars([
                    'name' => $foo['User']['name'],
                    'text' => $foo['Notification']['text'],
              )
              ->emailFormat('html')
              ->to($foo['User']['email'])
              ->send();

这个配置:

class EmailConfig
{
    public $default = array(
        'host' => 'smtp.server.com',
        'port' => 587,
        'username' => 'user@domain.com',
        'password' => 'pwdAsYouKnow',
        'from' => array('noreply@domain.com' => 'Company'),
        'transport' => 'Smtp'
    );
}

如您所见,我发送电子邮件以获取动态定义的用户电子邮件。

我的目标是当我在我的机器上进行本地开发时,强制每次拨打->send()来强制使用developer@domain.com这样的目的地。

我可以很容易地检测到我是否在开发中,但我不知道如何以“主”方式强制CakeEmail只发送到一个已定义的帐户,覆盖了呼叫中的一个。

我已经尝试过设置

'to' => array('developer@domain.com' => 'Dev'),

$default内,但没有成功。

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

我假设您在本地计算机上运行时处于调试模式,因此您可以检查调试模式是否已打开然后使用该模式发送到不同的电子邮件

if(Configure::read('debug')){
  $emailTo = 'developer@domain.com'
}
else{
  $emailTo = $foo['User']['email'];
}

然后您只需将变量用于电子邮件地址:

$sent = $Email->template('new-notification')
          ->subject('A new notification for you')
          ->viewVars([
                'name' => $foo['User']['name'],
                'text' => $foo['Notification']['text'],
          )
          ->emailFormat('html')
          ->to($emailTo)
          ->send();