4

我现在使用 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”或“邮件”这样的电子邮件,因为在我的 linux 服务器上,这些二进制文件没有安装。

任何想法 ?

4

2 回答 2

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();
    }
于 2013-05-07T08:27:26.583 回答
0

EmailComponent从 CakePHP 2.x 开始不推荐使用,取而代之的是CakeEmail库类。我相信只需CakeEmail要从 中读取您的配置app/Config/Email.phpEmailComponent而是将其选项作为属性 ( 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 !');

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

于 2013-01-21T12:35:58.757 回答