Laravel mail притворяется, ничего не печатает
Я установил '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('[email protected]', $user->username)->subject('Account');
});
Вывод в файле журнала только:
[2013-08-30 11:27:56] log.INFO: Притворяясь, что почтовое сообщение: [email protected] [] []
Я пробовал с полным HTML-представлением, также с другим представлением, которое содержит только строки, никаких переменных, но результат тот же.
Так ли это должно работать? Не следует ли печатать все сообщение, заголовок и т.д.? Есть ли проблема с кодом, или это правильный вывод?
Ответы
Ответ 1
Если вы установите 'pretend' => true
в app/config/mail.php
, тогда никакая почта не отправляется, вы получаете только сообщение в журнале, например:
[2014-07-17 14:15:07] production.INFO:
Pretending to mail message to: [email protected] [] []
Однако, если вы оставите 'pretend' => false
и вместо этого используйте драйвер log
('driver' => 'log'
, доступный с Laravel 4.2), то вместо отправки почты вы получите весь почтовый контент, записанный в журнал:
[2014-07-17 14:15:14] production.DEBUG:
Message-ID: <[email protected]>
Date: Thu, 17 Jul 2014 14:15:15 +0000
Subject: Welcome!
From: Ahmad <[email protected]>
To: John Smith <[email protected]>
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Order confirmed!
[] []
Ответ 2
Если вы действительно хотите просмотреть содержимое сообщения (например, при проверке проверки учетной записи пользователя или пароля reset) в файле журнала/хранилища/журнала; Вы можете изменить локальную копию поставщика /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}");
}
Затем вы увидите тело сообщения в журналах.
Ответ 3
Это нормальное поведение притворяться в системе 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}");
}
Ответ 4
Я включаю это в мои обратные вызовы:
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, отображаемый в вашем браузере.
Ответ 5
Я создал пакет, который также включает тему и тело для laravel 4.2.
Пакет можно найти здесь: https://packagist.org/packages/peercode/mail
Просто включите пакет, как описано здесь: https://github.com/peercode-eric/laravel-maillog
и журнал будет содержать дополнительную информацию.