質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • Laravel 5

    2078questions

    Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

パスワード再発行メールにCCを追加する

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 420

akihiro0117

score 23

laravel5を使っています。

use Illuminate\Foundation\Auth\ResetsPasswords;
を利用して、パスワード再発行の処理を実装しています。

お客様宛にメールを送るのと同時に、別のアドレスへCCで送りたいです。
#ユーザーサポートのためです。

Illuminate\Foundation内のソースを見て回っているのですが、メールを送信しているところすら、見つけられず、目的を達成できていません。
もし何かご存じの方がいらっしゃったら、アドバイスいただけないでしょうか?

Illuminate/Auth/Notifications/ResetPasswordとかをオーバーライドして、処理を書き変えるしか方法はないのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+1

パスワードリセットのメールは、ユーザークラスのsendPasswordResetNotificationにより実装されています。
Laravel 5.5 パスワードリセット リセットメールのカスタマイズ
Laravel 5.5 通知

※ メール送信箇所はIlluminate\Auth\Passwords\PasswordBrokerクラスのsendResetLinkメソッド

これを独自のメールにする場合は、独自の通知クラスを作成し、その中でtoMailメソッドを実装して下さい。

#User.php
    public function sendPasswordResetNotification($token)
    {
        $this->notify(new 独自の通知クラス($token));
    }

    

    #独自の通知クラスで、toMailの実装
    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->subject("xxx)
            ->cc(ここにcc用のメール定義)
            ->view("xxx");
    }

[追記]
質問の通りの機能ではサービス上の問題の指摘もあるので、akihiro0117さんのシステムの意図次第ですが、単にパスワードリセットを行ったかどうかを運営者が知りたい場合は、
Illuminate\Foundation\Auth\ResetsPasswordsのresetPasswordメソッドで、event(new PasswordReset($user));として、PasswordResetイベントが発行されているので、
これのリスナを作って別にメールを送信すると良いかと思います。
Laravel 5.5 イベント

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/09 13:22

    投稿が重複してしまいましたが、motuoさんのコメントと合わせて確認するとできるかと思います。

    キャンセル

+1

簡単な流れを提示します…
1.下記のコマンドで新しいnotificationを作成します。

 php artisan make:notification passwordReset

2.App\Notificationsに新しいclassが出来ると思います。この中のtoMailメソッドを好きに書き換えてください。
(例)

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
    return (new MailMessage)
        ->subject('パスワード再設定') 
        ->cc('hogehoge@example.com')
        //この下はメール文面です。好きに書き換えて下さい。
        ->view('emails.reset') 
        ->action('再設定用URL', url('/password/reset', $this->token));
    }

3.最後にUserモデルでsendPasswordResetNotificationをオーバーライドして下さい。
(例)

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Notifications\passwordReset;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    // sendPasswordResetNotificationをオーバーライド
    public function sendPasswordResetNotification($token)
    {
        $this->notify(new passwordReset($token));
    }
}

これで対応は完了です。ちなみに、デフォルトでは下記のメソッドが動いていそうです。

<?php

namespace Illuminate\Auth\Notifications;

use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;

class ResetPassword extends Notification
{
    /**
     * The password reset token.
     *
     * @var string
     */
    public $token;

    /**
     * Create a notification instance.
     *
     * @param  string  $token
     * @return void
     */
    public function __construct($token)
    {
        $this->token = $token;
    }

    /**
     * Get the notification's channels.
     *
     * @param  mixed  $notifiable
     * @return array|string
     */
    public function via($notifiable)
    {
        return ['mail'];
    }

    /**
     * Build the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', url(config('app.url').route('password.reset', $this->token, false)))
            ->line('If you did not request a password reset, no further action is required.');
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

本題ではありませんが、CCは送信者全員にわかるものですので、お客様の複数アドレスに同時配信という状況なら別ですが、そうでない先に送るのなら「パスワードリセット用のメールが違う場所にも送られている」となって、お客様に不信感を持たれる危険も大きいです。

内部的に必要な控えメールの場合は、BCCにしましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

larabel の実装を理解していないので、誤った認識の可能性があります

セキュリティ的な観点とメンテナンス性とを鑑みて、CC(BCC) ではなく、別アクションとして実装するほうが良い気がします。

CC したい意図がよく分からないのですが、リマインダーを送った後に、サポート向けに必要な情報を整理してメールすることで、ワンタイム URL を間違って踏むとか、おかしなことをするのを防ぐことが出来ます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Laravel 5

    2078questions

    Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。