2017-03-13 6 views
3

내 애플리케이션에서 기본 비밀번호 재설정 알림을 구현하려고하지만 비밀번호 재설정을 시도 할 때 아무런 문제가 발생하지 않고 "Google에 이메일을 발송했습니다. 재설정 링크! " 그러나 내 사서함을 검사하려고 할 때 응용 프로그램에서 전자 메일을 보내지 않았습니다. Laravel 5 비밀번호 재설정 알림이 전송되지 않음

나는 내 응용 프로그램에 필요한 모든 구성했다 : 이메일 드라이버, 데이터베이스

이 최대 설정 그러나 일부 내가 변경 않은 Laravel의 한 부분이 있습니다 : 사용자 모델, 사용자 테이블 마이그레이션

테이블 열이 바뀌 었습니다.

ID, 이름, US_EMAIL, 비밀번호, remember_token, created_at, updated_at, EMP_POSITION, 공장, 연락처, 서명, 온라인, 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

가 나는 마침내 발견 작성하지 않습니다.

사용자 테이블의 전자 메일 열을 "US_EMAIL"로 변경할 때 Illuminate \ Notifications 특성에서 전자 메일 열을 검색하는 기능이 있습니다.

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 등)로 무료 계정을 만들고 그 계정을 차단하도록 설정할 수 있습니까?


편집 : 다시 읽고 나면, 당신 문제는이 생각 : 귀하의 질문에 당신의 DB에서 "이메일"의 상단을 바탕으로

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

실제로 "US_EMAIL".

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

+0

비 재설정 메일을 보낼 수 있기 때문에 내 이메일 설정이 괜찮다고 생각합니다. –

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

이메일 설정을 사용하여 이메일을 보낼 수 있지만 .env 이메일 설정에 문제가없는 것 같습니다. 나는 정말로 여기서 문제가 어디에 있는지 모른다. –

0

확인하는

처음 3 가지가 있습니다 .env 파일

이 생산 및 gmail 메시지

이 테스트를 위해입니다
MAIL_DRIVER=smtp 
MAIL_HOST=smtp.mailtrap.io 
MAIL_PORT=2525 
MAIL_USERNAME=usernamefrommailtrap 
MAIL_PASSWORD=somepasswordfrommailtrap 
MAIL_ENCRYPTION=null 

mailtrap 메시지

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

두 번째 : config/mail.php

올바른 파일로 설정 파일이 올바르게 설정되었는지 확인하십시오. php artisan serve를 중지하고 다시 실행하는 것을 잊지 마세요 .env 파일을 편집 한 후 새로 고침

: 아니면이 .env 파일 셋째

에서 올바른 정보를 호출해야합니다. 편집 config/mail.php 파일 후
저장 캐시를 삭제 php artisan config:cache를 실행하는 것을 잊지하고 문제가 어디에 새

+0

안녕하세요, 아직 작동하지 않습니다. –

+0

나는이 클래스 Illuminate \ Auth \ Notifications \ ResetPassword를 탐색하려고했는데 통과 할 수 있는지 확인했다.__construct, via 및 toMail이라는 3 가지 함수가 있습니다. 처음 2 개의 함수에서 덤프하고 죽으려고 시도했지만 성공할 수 있었지만 마지막 함수 인 toMail에 덤프를 넣고 죽을 수 있습니다. –

+0

오 . 어떤 우편 시스템을 사용하고 있습니까? Gmail 또는 메일 함? – Advaith

관련 문제