0

我正在尝试使用 cake php 电子邮件组件发送电子邮件:

var $components = array('Email');

$email = new CakeEmail();
$email->from(array('me@example.com' => 'My Site'));
$email->to('xxx@gmail.com');
$email->subject('About');
$email->send('My message');

而且我总是收到消息:无法发送电子邮件。发生内部错误。在错误日志中有“SocketException”。

我正在使用 cakephp 2.0。

我应该如何配置以使其正常工作?我不想使用任何 smtp 服务器等,我只想发送简单的电子邮件。

我在我的电脑上使用 WAMP。

4

3 回答 3

2

取消注释该行:extension=php_openssl.dllphp.ini. 这将解决您的套接字问题。

我还要说的一件事是:

您正在混合两个核心库和组件。供参考

EmailComponent 现在已弃用。所以改用核心库。

有关更多详细信息,请查看此链接http://book.cakephp.org/2.0/en/core-utility-libraries/email.html

于 2012-07-07T13:38:21.817 回答
1

调试异常。

我敢打赌,您无法打开与邮件服务器的连接。看起来更像是您的邮件服务器设置或与它的连接的错误,而不是 CakePHp。

对于 Windows 的简单邮件服务器设置,我建议您使用 XAMPP,它带有预配置的邮件服务器 Pegasus,对我来说工作起来既简单又快速。

于 2012-05-07T22:12:04.313 回答
1

这看起来确实是您的邮件服务器设置或与其连接的错误。但是,您混淆了 EmailComponent 的 CakeEmail 类。

首先,您不是尝试使用 emailComponent 发送电子邮件,而是使用新的 CakeMail 类(来自 2.x 的新类)。因此,这:

var $components = array('Email');

和这个:

$email = new CakeEmail();

是两个不同的东西。第一个加载 EmailComponent,但您根本没有使用它。从 2.x 开始的 EmailComponent 已被弃用。在您的示例中,您使用的是 CakeEmail 类。

首先,您应该确保实际加载了该类:

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

然后检查您是否有配置文件:

App/Config/email.php

我想您当前正在使用默认配置选项。这意味着默认传输是“邮件” - PHP邮件功能。我想你得到一个SocketException,因为它无法连接到底层的邮件传输代理,并且因为它试图通过系统套接字这样做......(我认为 Windows 中不存在,但我可能是错了。我确定在 windows API 中有类似的东西用于进程间通信)

无论如何,使用默认的电子邮件配置是可以的。阅读 CakePHP 书籍中关于CakeEmail类的部分。

于 2012-05-08T09:27:08.787 回答