CakeEmail调试

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)

我该如何输出电子邮件?我已经搜索谷歌并且一无所获.

Cri*_*ash 8

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一样,我打算在浏览器中预览我的电子邮件.有两种方法需要考虑:

  • 解析send()返回的'message'并输出相关的部分.
  • 只需像我的常规Cake模板一样呈现我的电子邮件模板并输出结果.

一旦我实施了解决方案,我会尝试更新我的答案.


bur*_*zum 5

在启用日志的情况下构造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)

因此,您的电子邮件将最终出现在该日志文件中.

如果您不喜欢,可以自由编写自己的传输类并登录到数据库,会话或只是调试()传输类中的输出,请按照您的喜好进行操作!