使用cakephp发送邮件时出错

时间:2013-01-21 12:18:51

标签: email cakephp

我现在使用CakePHP已经有一段时间了,我想使用Email组件。 但是我遇到了麻烦。

的确,当我尝试发送电子邮件时,我得到了一个:

无法发送电子邮件。 错误:发生内部错误。

嗯......但是,为什么? ^^

这是我的控制器:

$this->Email->from = 'Email<my.email@myHost.fr>';
$this->Email->to = 'Another.Email@AnotherHost.com';
$this->Email->subject = 'This is the email Subject';
if ($this->Email->send('This is the email message'))
    $this->set('success', 'Email successfully sent !');

我在app / Config中的Email.php:

public $smtp = array(
    'transport' => 'Smtp',
    'from' => array('contact@myHost.fr' => 'myHost'),
    'host' => '192.168.10.50',
    'port' => 25,
    'timeout' => 30,
    'username' => 'user',
    'password' => 'secret',
    'client' => null,
    'log' => false,
    //'charset' => 'utf-8',
    //'headerCharset' => 'utf-8',

我还想知道Cake是否使用二进制文件来发送电子邮件,例如'sendmail'或'mail',因为在我的linux服务器上,这些二进制文件没有安装。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

自CakePHP 2.x以来,EmailComponent已弃用,而CakeEmail library class则替换为CakeEmail。我相信只有app/Config/Email.php才能从EmailComponent读取您的配置,smtpOptions将其选项视为属性(CakeEmail)。

在控制器类定义之上迁移到新的App::uses('CakeEmail', 'Network/Email'); 组件非常容易,只需添加:

// In the top of your controller, initialize the component variable first.
private $__Email;

// In your action...
$this->__Email = new CakeEmail();
$this->__Email->from('my.email@myHost.fr')
    ->to('email@AnotherHost.com')
    ->subject('This is the email Subject')
    ->send('This is the email message');

$this->set('success', 'Email successfully sent !');

然后在您的控制器中,用以下代码替换当前代码:

mail()

至于您的第二个问题,是的,您需要在用于发送邮件的服务器上安装类似sendmail的MTA(邮件传输代理)。在水下,CakeEmail使用PHP的sendmail_path方法,该方法使用您在php.ini文件中设置为{{1}}的任何内容。

答案 1 :(得分:0)

1)配置你的app / config / email.php:

public $gmail = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => 'your qmail username@gmail.com',
        'password' => 'password',
        'transport' => 'Smtp'
    );


2)在控制器上加载电子邮件组件

App::uses('CakeEmail', 'Network/Email');

3)发送电子邮件

    public function send_email(){
            $Email = new CakeEmail();
            $Email->config('gmail');
            $Email->from('from@gmail.com');
            $Email->to('to@gmail.com');  
            $Email->subject('Expire Date Information ');
            $Email->emailFormat('html');
            $Email->send();
    }