Rya*_*ter 3 cakephp cakephp-2.0
我正在尝试在我的控制器中设置一个测试电子邮件,它会按原样输出电子邮件,而不会实际发送电子邮件.我正在使用CakePHP 2.1
在我的控制器的顶部,我有:
App::uses('CakeEmail', 'Network/Email');
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,方法是:
$email = new CakeEmail('default');
$email->from(array('me@example.com' => 'My Site'));
$email->to('you@example.com');
$email->subject('About');
$email->send('My message');
Run Code Online (Sandbox Code Playgroud)
在我的电子邮件配置中,我将$ default设置为Debug模式:
public $default = array(
'transport' => 'Debug',
'from' => 'you@localhost.com',
//'charset' => 'utf-8',
//'headerCharset' => 'utf-8',
);
Run Code Online (Sandbox Code Playgroud)
我该如何输出电子邮件?我已经搜索谷歌并且一无所获.
send()方法实际上返回一个包含电子邮件标题和正文的数组(每个都作为字符串).因此,如果您正在编写单元测试,则可以搜索这些字符串以查看它们是否包含应有的内容.
如果要在不发送电子邮件的情况下运行send命令,可以将传输方法更改为"调试"传输,该传输通过格式化电子邮件的动作而不实际发送.
例如:
$email = new CakeEmail();
$email->transport('Debug');
$response = $email->send();
echo $response['headers']; // headers as string
echo $response['message']; // message body with attachments
Run Code Online (Sandbox Code Playgroud)
请注意,如果您要发送HTML电子邮件和/或使用附件,正文将以某种编码形式包含这些项目.如果您要发送普通和HTML编码的电子邮件,则某些内容将出现两次(一次是普通的,再次是HTML).
像Drawrdesign一样,我打算在浏览器中预览我的电子邮件.有两种方法需要考虑:
一旦我实施了解决方案,我会尝试更新我的答案.
在启用日志的情况下构造CakeEmail:
$Email = new CakeEmail(array('log' => true));
Run Code Online (Sandbox Code Playgroud)
下面的代码是CakeEmail类send()方法的摘录,应该是相当自我解释的.
$contents = $this->transportClass()->send($this);
if (!empty($this->_config['log'])) {
$level = LOG_DEBUG;
if ($this->_config['log'] !== true) {
$level = $this->_config['log'];
}
CakeLog::write($level, PHP_EOL . $contents['headers'] . PHP_EOL . $contents['message']);
}
return $contents;
Run Code Online (Sandbox Code Playgroud)
因此,您的电子邮件将最终出现在该日志文件中.
如果您不喜欢,可以自由编写自己的传输类并登录到数据库,会话或只是调试()传输类中的输出,请按照您的喜好进行操作!
| 归档时间: |
|
| 查看次数: |
8237 次 |
| 最近记录: |