2017-03-13 23 views
3

私はアプリケーションでデフォルトのリセットパスワード通知を実装しようとしていますが、パスワードリセットを試みると何も起こりません。「私たちはあなたのパスワードをEメールで送ってきましたリセットリンク! "私のメールボックスをチェックしようとすると、私のアプリケーションによって電子メールは送信されませんでした。Laravel 5リセットパスワード通知は送信されません

私は自分のアプリケーションに必要なすべての設定でした: 電子メール・ドライバを、 データベースのセットアップ

をしかし、私は変更されなかったLaravelのいくつかの部分があります。 ユーザーモデル、 ユーザー表の移行

テーブルの列私は変更されました。

ID、名前、US_EMAIL、パスワード、remember_token、のcreated_at、updated_atの、 EMP_POSITION、FACTORY、CONTACT、SIGNATURE、ONLINE、DATE_ONLINE、ADMIN、 LOCK

私はリセットパスワードに何もしませんでしたすべてのフィールドはデフォルトのラーベル移行からそのままです。

私はアプリケーションをデバッグしようとしていますが、パスワードをリセットしようとすると、アプリケーションは「password_resets」テーブルにデータを正常に保存できますが、まだメールのリセット通知を受け取ることはできません。

私はこの特性に目を向けると、「パスワードリセットリンクを送信」をクリックした後にプロセスがどこに行くかを見るために「ダンプアンドダイ」しようとしました。アプリケーションがまだこの特性に進むことができるようです"dd"メッセージ。

<?php 

namespace Illuminate\Auth\Passwords; 

use Illuminate\Auth\Notifications\ResetPassword as ResetPasswordNotification; 

trait CanResetPassword 
{ 
    /** 
    * Get the e-mail address where password reset links are sent. 
    * 
    * @return string 
    */ 
    public function getEmailForPasswordReset() 
    { 
     return $this->EMAIL; 
    } 

    /** 
    * Send the password reset notification. 
    * 
    * @param string $token 
    * @return void 
    */ 
    public function sendPasswordResetNotification($token) 
    { 
     dd('Test SendPasswordNotification'); 
     $this->notify(new ResetPasswordNotification($token)); 
    } 
} 

は、私はまた、これに見えなかったが、私は「toMail」機能に「ダンプと死ぬ」しようとすると、それが進行しませんでした。私はこのクラスに進むことができないので、アプリケーションが電子メールを送信しないかもしれないと思っていた、私はちょうど推測しているが、誰もが私にこれを助けることができることを願っています。

<?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) 
    { 
     dd('Test ToMail'); 
     return (new MailMessage) 
      ->line('You are receiving this email because we received a password reset request for your account.') 
      ->action('Reset Password', route('password.reset', $this->token)) 
      ->line('If you did not request a password reset, no further action is required.'); 
    } 
} 

アップデート:私は私の.envの電子メール設定を使用して電子メールを送信することができ、私は アプリケーションは、私が使用したメールサーバーに認証することができると思います。 問題は、パスワードリセットの電子メール通知を受け取ることができず、「パスワードリセットリンクを送信」をクリックした後もエラーを表示しません。

+0

ええと、非リセットパスワードメール、単なるジェネリックメールを送信しようとすると何が起こるかを参照してください。 –

+0

こんにちは、私はやったし、私は本当に受信することはできませんし、エラーを表示されませんので、私はリセットされていない電子メールを受信することができます、私の唯一の問題は、パスワードリセットです。私は私のメール設定を使用して電子メールを送信することができます非リセットメール –

答えて

2

を作成するphp artisan config:cacheを実行することを忘れないでください。

i「がUS_EMAIL」email列を取得を照らし\通知トレイトからの機能があるために、ユーザテーブルからemail列を変更します。

Illuminate\Notifications 

    public function routeNotificationFor($driver) 
{ 


    if (method_exists($this, $method = 'routeNotificationFor'.Str::studly($driver))) { 
     return $this->{$method}(); 
    } 


    switch ($driver) { 
     case 'database': 
      return $this->notifications(); 
     case 'mail': 
      return $this->email; 
     case 'nexmo': 
      return $this->phone_number; 
    } 
} 

ソリューション:

on the "routeNotificationFor" function i changed this line "return $this->email;" 

へ:

"this-> US_EMAILを返す;" します

0

config/mail.phpと.envでメール設定を確認してください。私の最初の推測では、あなたは "mail"または "sendmail"に設定されており、あなたのマシンやサーバーにインストールされていません。

外部メールサービス(mailgun、sparkpostなど)を使用して無料アカウントを作成し、そのアカウントを設定することができますか?


EDIT:あなたのDBに質問の上、「電子メール」フィールドに基づいて

public function getEmailForPasswordReset() { return $this->EMAIL; }

が実際に「US_EMAIL」です。もう一度読んだ後、私はこの問題はこれです、あなただと思います。

public function getEmailForPasswordReset() { return $this->US_EMAIL; }

+0

私は私の電子メールの設定を考えては結構です、私は.envメール設定に問題がありませんと思います。私は本当にどこに問題があるのか​​分からない。 –

0

あなた.envファイルをチェックし、MAIL_DRIVER探してください。 それはMailtrap.ioを使用して以下のようになりますMailtrap.io

のような電子メールのテスターに​​ダミーの電子メールを作成します。

MAIL_DRIVER=smtp 
MAIL_HOST=smtp.mailtrap.io 
MAIL_PORT=2525 
MAIL_USERNAME=usernamefrommailtrap 
MAIL_PASSWORD=somepasswordfrommailtrap 
MAIL_ENCRYPTION=null 

今それをテストし、あなたが電子メールを受信した場合Mailtrapにあなたのダミーメールをチェック。

+0

を送ることができますので、 –

0

ファーストをチェックするための3つの事があります。.envファイル

MAIL_DRIVER=smtp 
MAIL_HOST=smtp.gmail.com 
MAIL_PORT=587 
[email protected] 
MAIL_PASSWORD=password 
MAIL_ENCRYPTION=tls 

これは、生産のためのものであり、gmailメッセージ

MAIL_DRIVER=smtp 
MAIL_HOST=smtp.mailtrap.io 
MAIL_PORT=2525 
MAIL_USERNAME=usernamefrommailtrap 
MAIL_PASSWORD=somepasswordfrommailtrap 
MAIL_ENCRYPTION=null 

これはテストとmailtrapメッセージ

のためであります

第二:config/mail.php

は、あなたの設定ファイルは、正しいデータので正しく設定されていることを確認してください。 php artisan serveを停止し、再びそれを実行することを忘れないでください.envファイルを編集した後のリフレッシュ

:またはそれは.envファイルサード

から正しい情報を呼び出していることを確認してください。 config/mail.phpファイルを編集した後
は、問題がある場合、私はついに見つけ保存したキャッシュを削除して、新しい

+0

こんにちは、まだ動作していません。 –

+0

私はこのクラスIlluminate \ Auth \ Notifications \ ResetPasswordをナビゲートしようとしました。__construct、via、toMailの3つの関数がありますが、最初の2つの関数をダンプして終了しようとしましたが、それは成功する可能性がありましたが、最後の関数ではtoMailを入れてダンプを実行してしまいます。 –

+0

Ohどの郵送システムを使用していますか? Gmailやメールトラップ? – Advaith

関連する問題