我现在使用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服务器上,这些二进制文件没有安装。
有什么想法吗?
答案 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();
}