我正在尝试使用CakeEmail,我遇到了问题。 我将代码添加到我的add函数中,类似于博客教程的add函数,但是当我添加一个项目时,它表示未定义的变量。如果我删除了电子邮件代码,它就可以了,如果我将其保留并刷新页面,则该项目会显示但没有电子邮件。
以下是该函数的代码:
public function add()
{
$this->set('isAddValid', false);
$this->set('addValidationErrors', false);
if ($this->request->is('post'))
{
// If the save is successful, close the dialog and display the success message
// Else, set the error flags.
if ($this->LocalClock->save($this->request->data))
{
$this->set('localClocks', $this->request->data);
$this->LocalClock->save($localClocks);
$this->set('isAddValid', true);
$this->set('addValidationErrors', false);
$email = new CakeEmail('smtp');
$email->from(array('me@example.com' => 'Local Clocks'));
$email->to('you@example.com');
$email->subject('New Local Clock Added');
$email->send('A new local clock has been added.');
CakeEmail::deliver('you@example.com', 'New local Clock', 'New Local Clock Added',
array('from' => 'localhost@localhost'));
}
}
这是配置文件夹中的email.php文件(我刚刚复制了它们在那里的默认文件中粘贴):
class EmailConfig {
public $default = array(
'transport' => 'Mail',
'from' => 'you@localhost',
//'charset' => 'utf-8',
//'headerCharset' => 'utf-8',
);
public $smtp = array(
'transport' => 'Smtp',
'from' => array('site@localhost' => 'My Site'),
'host' => 'localhost',
'port' => 25,
'timeout' => 30,
'username' => 'user',
'password' => 'secret',
'client' => null,
'log' => false,
//'charset' => 'utf-8',
//'headerCharset' => 'utf-8',
);
public $fast = array(
'from' => 'you@localhost',
'sender' => null,
'to' => null,
'cc' => null,
'bcc' => null,
'replyTo' => null,
'readReceipt' => null,
'returnPath' => null,
'messageId' => true,
'subject' => null,
'message' => null,
'headers' => null,
'viewRender' => null,
'template' => false,
'layout' => false,
'viewVars' => null,
'attachments' => null,
'emailFormat' => null,
'transport' => 'Smtp',
'host' => 'localhost',
'port' => 25,
'timeout' => 30,
'username' => 'user',
'password' => 'secret',
'client' => null,
'log' => true,
//'charset' => 'utf-8',
//'headerCharset' => 'utf-8',
);
}
任何帮助将不胜感激
由于
答案 0 :(得分:3)
你的问题正是错误所说的 - “未定义的变量:localClocks”。
$this->set('localClocks', $this->request->data);
$this->LocalClock->save($localClocks);
这不会设置变量$ localClocks - 它会将数据传递给变量,该变量可以从View中访问(但在控制器中无法访问)。
更改为此,您应该没事(或者至少可以解决此问题):
$this->LocalClock->save($this->request->data);
或者,如果你真的想把它分成两行:
$localClocks = $this->request->data;
$this->LocalClock->save($localClocks);
如果您愿意,您仍然可以“设置”变量以便在视图中使用,但是再次 - 使用$ this-> set不会使控制器可以访问变量。 / p>
答案 1 :(得分:1)
我发现答案要求我在email.php文件中添加另一个设置。
我创建了一个Gmail帐户,因此我可以使用该电子邮件功能。
代码非常简单:
public $gmail = array(
'host' => 'ssl://smtp.gmail.com',
'port' => 465,
'username' => 'account@gmail.com',
'password' => 'password',
'transport' => 'Smtp',
'timeout' => 1
);
在add()函数中:
$email = new CakeEmail('gmail');