web-dev-qa-db-ja.com

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('[email protected]', $user->username)->subject('Account');
});

ログファイルの出力はこれだけです:

[2013-08-30 11:27:56] log.INFO:メールを送信するふりをします:[email protected] [] []

完全なHTMLビューで試してみました。また、文字列のみを含み、変数を含まない別のビューでも試しましたが、出力は同じです。

これはこれがどのように機能するかですか?メッセージ全体やタイトルなどを印刷する必要はありませんか?コードに問題がありますか、それとも正しい出力ですか?

27
totymedli

'pretend' => trueapp/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!

 [] []

/ 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}");
}

次に、ログにメッセージの本文が表示されます。

10
sirtimbly

これを送信コールバックに含めます。

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を確認することもできます。

8
foolishoptimist

これは、Laravelメーラーシステムにおけるふりの通常の動作です。メッセージはどこにも表示されません。ログにも記録されません。メールメッセージが送信されたふりをしたことだけが記録されます。関連するソースコードを見てください:

/**
 * 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}");
}

laravel 4.2の件名と本文も含めるパッケージを作成しました。

パッケージはここにあります: https://packagist.org/packages/peercode/mail

ここで説明されているようにパッケージを有効にするだけです: https://github.com/peercode-eric/laravel-maillog とログに追加情報が含まれます。

1
redsd