首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakeEmail调试

CakeEmail调试
EN

Stack Overflow用户
提问于 2012-03-21 09:09:39
回答 3查看 8.6K关注 0票数 3

我正在尝试在我的控制器中设置一个测试电子邮件,它输出电子邮件的外观,而不是实际发送电子邮件。我使用的是CakePHP 2.1

在我的控制器的顶部,我有:

代码语言:javascript
复制
App::uses('CakeEmail', 'Network/Email');

在我的控制器中,方法是:

代码语言:javascript
复制
$email = new CakeEmail('default');  
$email->from(array('me@example.com' => 'My Site'));  
$email->to('you@example.com');  
$email->subject('About');  
$email->send('My message');

在我的电子邮件配置中,我已经将$default设置为调试模式:

代码语言:javascript
复制
public $default = array(
    'transport' => 'Debug',
    'from' => 'you@localhost.com',
    //'charset' => 'utf-8',
    //'headerCharset' => 'utf-8',
);

如何输出电子邮件?我搜索了一下谷歌,结果一无所获。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-21 09:15:38

在启用日志的情况下构建CakeEmail:

代码语言:javascript
复制
$Email = new CakeEmail(array('log' => true));

下面的代码是CakeEmail类send()方法的摘录,它应该是不言而喻的。

代码语言:javascript
复制
    $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;

因此,您的电子邮件将在日志文件中结束。

如果您不喜欢编写自己传输类并将其记录到数据库、会话或简单地调试()传输类中的输出,请按您的喜好执行!

票数 5
EN

Stack Overflow用户

发布于 2012-12-11 02:52:25

send()方法实际上返回一个包含电子邮件头和正文的数组(每个都是一个字符串)。因此,如果您正在编写单元测试,您可以搜索这些字符串,看看它们是否包含它们应该包含的内容。

如果你想在不发送电子邮件的情况下运行send命令,你可以将传输方法更改为"Debug“传输,它会在不实际发送电子邮件的情况下格式化您的电子邮件。

例如:

代码语言:javascript
复制
$email = new CakeEmail();
$email->transport('Debug');
$response = $email->send();
echo $response['headers']; // headers as string
echo $response['message']; // message body with attachments

请注意,如果您正在发送HTML电子邮件和/或使用附件,则正文将以某种编码形式包含这些项目。如果你发送的是普通的和HTML编码的电子邮件,一些内容会出现两次(一次是普通的,另一次是HTML)。

像Drawrdesign一样,我计划在浏览器中提供电子邮件的预览。有两种方法需要考虑:

  • 解析由send()返回的'message‘并输出相关部分。
  • 只是将我的电子邮件模板呈现为常规的蛋糕模板并输出结果。

一旦我实现了一个解决方案,我会尝试更新我的答案。

票数 9
EN

Stack Overflow用户

发布于 2014-10-18 08:31:17

可以在不实际发送电子邮件的情况下查看您的电子邮件以及邮件的外观。这是我发现的一个巧妙的小技巧,非常有用,尽管它可能有点“老生常谈”:

诀窍是将包含任何数据的电子邮件呈现到特定的布局和模板中,然后在使用电子邮件组件发送之前显示此结构。我想出了以下函数来测试电子邮件(调试它们):

代码语言:javascript
复制
public function debugEmail() {

    // set some data for your email
    $data = 'foo';
    $this->set(compact('data'));    

    // setup layout and a View instance
    $this->layout = 'Emails/html/default';
    $View = new View($this, false);

    // render the email template including the layout into a variable
    $html = $View->render('../Emails/html/cron/your_template');

    // print the contents on screen (do NOT use pr() here!)
    print_r($html);
    exit;
}

该示例利用默认html电子邮件布局的布局设置和名为your_template的模板。它简单地将给定布局内的电子邮件模板呈现为一个变量,并将其打印在屏幕上。浏览器将解释HTML,您将看到您的电子邮件将是什么样子。

注意:一些电子邮件客户端显示的html略有不同。您将需要使用内联样式(CSS)并进行跨程序检查,以验证一切就绪。此功能主要用于检查给定数据在我的电子邮件中是否结构化并正确显示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9797318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档