CakeEmail无法正常添加功能

时间:2012-07-05 13:18:50

标签: email cakephp-2.0 cakephp-2.1

我正在尝试使用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',
    );
}

任何帮助将不胜感激

由于

2 个答案:

答案 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');