Laravel邮件假装什么都不打印

时间:2013-08-30 11:55:43

标签: php email laravel

我在'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视图,另一个视图只包含字符串,没有变量,但输出是相同的。

这是应该如何运作的方式吗?它不应该打印整个消息,标题等?代码是否有问题,或者这是正确的输出?

5 个答案:

答案 0 :(得分:65)

如果您在'pretend' => true中设置了app/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!

 [] []

答案 1 :(得分: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}");
}

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

答案 2 :(得分: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}");
}

答案 3 :(得分: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。

答案 4 :(得分:1)

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

可以在此处找到该软件包:https://packagist.org/packages/peercode/mail

只需启用此处的说明:https://github.com/peercode-eric/laravel-maillog 并且日志将包含其他信息。