如何使用电子邮件传输类" Debug"在CakePHP 3中

时间:2015-08-07 14:37:29

标签: cakephp-3.0

如何使用电子邮件传输类" 调试"查看结果(最终邮件)?在CakePHP 3?或者我在哪里可以找到返回的结果?在the book中没有关于电子邮件调试的详细信息。

// Each transport needs a `className`. Valid options are as follows: // - Mail : Send using PHP mail function // - Smtp : Send using SMTP // - Debug : Do not send the email, just return the result 中说

'EmailTransport' => [
  'default' => [
    'className' => 'Debug',
  ],
],

所以我设置了

namespace App\Controller;
use App\Controller\AppController;
use Cake\Event\Event;
use Cake\Network\Exception\NotFoundException;
use Cake\Mailer\Email;

class TestsController extends AppController {
  public function email_test() {
    $email = new Email('default');
    $email->from(['website@example.com' => 'My Site'])
          ->to('destination@example.com')
          ->subject('Here the subject')
          ->send('Here the mail content'));
  }
}

在测试控制器中:

/tmp/

但结果(最终邮件)保存或显示在哪里?

我期望在/logs/localhost/test/email_test/中调试结果,但无法找到有关最终邮件的任何信息。

如果我在浏览器中查看测试页(tl.to(elArray[left], 1, { css:{left: elArray[right].offset().left + "px" }}); tl.to(elArray[right], 1, { css:{left: elArray[left].offset().left + "px" }); ),则不会显示任何内容(因为我不知道要在视图模板中添加哪些内容以进行电子邮件调试)。 CakePHP-DebugKit中还没有关于邮件的信息...

(我目前正在使用CakePHP 3.1 beta对此进行测试,如果相关的话)

3 个答案:

答案 0 :(得分:3)

结果由Email::send()方法返回。它总是返回邮件内容,只是Debug传输实际上并没有发送它。

$result = $email->...->send('Here the mail content');
debug($result);

<强> https://github.com/cakephp/.../3.1.0-beta2/src/Mailer/Transport/DebugTransport.php#L36

我猜这些文档中的更多细节不会受到影响。

如果您想要记录邮件,则必须使用log选项启用/配置传输配置中的日志记录。默认情况下,它设置为false

  

'log':记录电子邮件标题和消息的日志级别。 true将使用LOG_DEBUG

<强> Cookbook > Email > Configuration Profiles

答案 1 :(得分:1)

我今天遇到了同样的问题,花了我一段时间才弄清楚。我认为一个完整的示例会很有用,所以这就是我的结论:

app.php:

/**
 * Email configuration.
 */
'EmailTransport' => [
    'default' => [

        //This disables the actual sending of the mail
        'className' =>"Debug", 

        'host' => 'smtp.office365.com',
        'port' => 587,
        'timeout' => 30,
        'username' => 'username',
        'password' => 'secret',
        'client' => null,
        'tls' => true,
        'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
    ],
],
/**
 * Email delivery profiles
 */
'Email' => [
    'default' => [
        'transport' => 'default',
        'from' => 'sender@domain.com',

        //this enables logging of the mail
        'log' => true, 
    ],
],
/**
 * Configures logging options
 */
'Log' => [
    //Setup a special log config for mails
    'email' => [ 
        'className' => FileLog::class,
        'path' => LOGS,
        'file' => 'email', //filename for logging
        'url' => env('LOG_DEBUG_URL', null),
        'levels' => ['notice', 'info', 'debug'],

        //Set the scope to email
        'scopes' => ['email'], 

    ],

    ...
],

请注意,'log'=> true 行出现在电子邮件配置文件中,而不是传输配置中。在文档中这还不是很清楚。 另请注意,电子邮件类的日志范围为“电子邮件”。因此必须在日志记录配置中定义-否则不会显示任何内容。 希望这会有所帮助。

答案 2 :(得分:0)

如果您有debugKit,电子邮件将显示在cakephp调试栏中。enter image description here

不幸的是,大多数情况下,发送电子邮件后,您会执行重定向,因此信息在重定向页面中丢失。很简单:在调试时禁用重定向。