28

'pretend' => true,在 中设置mail.php,创建了这个new.php视图:

<body>
    <div>
        E-mail: {{ $user->email }}<br>
        User: {{ $user->username }}<br>
        Pass: {{ $user->password }}<br>
    </div>
</body>

然后在我的控制器中,我使用此代码“发送”邮件:

$data['user'] = $user;
Mail::send('emails.new', $data, function($message) use ($user)
{
    $message->to('example@example.hu', $user->username)->subject('Account');
});

日志文件中的输出只有这样:

[2013-08-30 11:27:56] log.INFO:假装将消息发送到:example@example.com [] []

我尝试了一个完整的 HTML 视图,也尝试了另一个只包含字符串、没有变量的视图,但输出是相同的。

这是应该如何工作的方式吗?它不应该打印整个消息、标题等吗?代码有问题还是这是正确的输出?

4

5 回答 5

66

如果您设置'pretend' => trueapp/config/mail.php则不会发送任何邮件,您只会在日志中收到一条消息,如下所示:

[2014-07-17 14:15:07] production.INFO:
    Pretending to mail message to: foo@example.com [] []

但是,如果您离开'pretend' => false并改用log驱动程序('driver' => 'log'自 Laravel 4.2 起可用),那么您将不再发送邮件,而是将整个邮件内容写入日志:

[2014-07-17 14:15:14] production.DEBUG:
    Message-ID: <da39a3ee5e6b4b0d3255bfef95601890@example.com>

Date: Thu, 17 Jul 2014 14:15:15 +0000

Subject: Welcome!
From: Ahmad <ahmad@example.com>
To: John Smith <foo@example.com>
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable


    Order confirmed!

 [] []
于 2014-07-23T21:36:03.717 回答
10

如果您确实想在 /storage/logs 日志文件中查看消息的内容(例如在测试用户帐户验证或密码重置电子邮件时);您可以修改 vendor/laravel/framework/src/Illuminate/Mail/Mailer.php 的本地副本,并在 logMessages 函数中修改它看起来像

protected function logMessage($message)
{
    $emails = implode(', ', array_keys((array) $message->getTo()));
    $body = $message->getBody();
    $this->logger->info("Pretending to mail message to: {$emails} :-: {$body}");
}

然后您将在日志中看到消息的正文。

于 2013-11-01T20:16:17.890 回答
8

这是 Laravel Mailer 系统中伪装的正常行为。它不会在任何地方呈现您的消息,甚至不会在日志中,它只会记录假装发送的邮件消息。查看相关源码:

/**
 * Send a Swift Message instance.
 *
 * @param  Swift_Message  $message
 * @return void
 */
protected function sendSwiftMessage($message)
{
    if ( ! $this->pretending)
    {
        return $this->swift->send($message);
    }
    elseif (isset($this->logger))
    {
        $this->logMessage($message);
    }
}

/**
 * Log that a message was sent.
 *
 * @param  Swift_Message  $message
 * @return void
 */
protected function logMessage($message)
{
    $emails = implode(', ', array_keys($message->getTo()));

    $this->logger->info("Pretending to mail message to: {$emails}");
}
于 2013-08-30T12:21:03.437 回答
8

我将其包含在我的发送回调中:

Mail::send(array('emails.html','emails.text'),$data,function($message) use($data)
{
   //Set $message data
   if(Config::get('mail.pretend')) Log::info(View::make('emails.html',$data)->render());
}

或者,您可以将视图渲染传递到另一个视图,以查看浏览器中渲染的 html。

于 2014-03-20T02:14:19.257 回答
1

我创建了一个包,还包括 laravel 4.2 的主题和正文。

包可以在这里找到:https ://packagist.org/packages/peercode/mail

只需按照此处所述启用包:https ://github.com/peercode-eric/laravel-maillog ,日志将包含附加信息。

于 2014-11-11T13:40:41.943 回答