我想在cakephp中覆盖App Controller中的电子邮件配置设置,我的电子邮件服务器设置存储在数据库中,管理员有权随时更改这些设置,因此我需要在我的应用中动态更新这些设置。我的App Controller代码如下:
<?php
class AppController extends Controller {
public $helpers = array('Front','Custom','Js'=>array('Jquery','MooTools'));
public $components = array(
'Security' => array(
'blackHoleCallback' => 'blackhole',
'csrfUseOnce' => false
),
'Session','Email',
'Auth','Cookie',
'Facebook.Connect' => array('model' => 'User'),'Custom','RequestHandler'
);
public function beforeFilter()
{
parent::beforeFilter();
//Admin Settings
foreach($this->Custom->getSettings() as $key=>$val):
Configure::write("Adminsetting.".$key,$val);
endforeach;
// End Admin Setting
$siteconf=Configure :: read('Adminsetting');
/* Email Server Setting */
//if($siteconf['transport']=='Smtp'){
$this->Email->delivery='Smtp';
$this->Email->smtpOptions=array(
'port'=>$siteconf['port'],
'timeout'=>$siteconf['timeout'],
'host' => $siteconf['hostname'],
'username'=>$siteconf['username'],
'password'=>$siteconf['password']
);
.....
?>
When I using $this->Email->sent() I am getting this error:
"No connection could be made because the target machine actively refused it."
Please suggest...
答案 0 :(得分:0)
您的电子邮件配置设置位于/app/Config/email.php中。 在发送任何新电子邮件之前的任何时候,您都可以覆盖并设置默认电子邮件参数。
我建议在设置表中处理您的自定义电子邮件设置(并通过烘焙命令行或遵循博客教程创建适当的控制器和模型和视图)。
您的表格可以遵循以下架构:
CREATE TABLE `settings` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`key` varchar(255) DEFAULT NULL,
`value` varchar(255) DEFAULT NULL,
`type` varchar(255) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT
然后在AppController类的beforeFilter()回调中加载所有设置。 你可以这样做:
public function beforeFilter() {
$this->Setting = ClassRegistry::init('Setting');
$settings = $this->Setting->find('list', array('fields' => array('key' => 'value')));
foreach($settings as $key => $value) {
Configure::write($key, $value);
}
}
使用基本的CRUD操作,您现在可以管理任何设置。
现在,当您想要发送电子邮件时,您应该以某种方式调整您的代码:
$Email = new CakeEmail();
$Email->template('welcome', 'fancy')
->emailFormat(Configure::read('emailFormat'))
->to('bob@example.com')
->from('app@domain.com')
->transport(Configure::read('transport'))
->host(Configure::read('host'))
->port(Configure::read('port'))
->username(Configure::read('username'))
->password(Configure::read('password'))
->send();
警告。这应该回答你的问题,但这不是我个人所做的,因为现在任何现有的设置都可以被覆盖,而且非常危险。