Laravel 8 не отправляет электронное письмо с подтверждением

#php #laravel

#php #laravel

Вопрос:

Я пытаюсь реализовать проверку электронной почты Laravel по умолчанию, но всякий раз, когда я переключаюсь column name users table с email Laravel на user_email Laravel, перестаю отправлять электронное письмо с подтверждением.

Я также переопределяю метод по умолчанию getEmailForVerification() , найденный в MyVerifyEmail.php файле в моей пользовательской модели, который возвращается user_email правильно.

Моя пользовательская модель:

 <?php

namespace AppModels;

use IlluminateContractsAuthMustVerifyEmail;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;

class User extends Authenticatable implements MustVerifyEmail
{
    use HasFactory, Notifiable;


    public function getAuthPassword ()
    {
        return $this->user_password;
    }

    protected $primaryKey = 'user_id';

    protected $fillable = [
        'user_name',
        'user_email',
        'user_password',
        'user_phone',
        'user_role_id',
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];

    protected $casts = ['email_verified_at' => 'datetime',];
    
    public function getEmailForVerification()
    {
        return $this->user_email;
    }

    public function role()
    {
        return $this->belongsTo(Role::class , 'user_role_id');
    }
}
 

Код RegisterController:

 public function store(Request $request)
    {
        $request->validate([
            'name'=>'required',
            'email'=>'required |email|unique:AppModelsUser,user_email',
            'password'=>'required',
            'phone'=>'required|unique:AppModelsUser,user_phone|min:10|max:15'
        ]);
        
        $user = User::create([
        'user_name' => $request->name,
        'user_email' => $request->email,
        'user_password' => Hash::make($request->password),
        'user_phone' => $request->fullMobileNumber,
        'user_role_id' => '9'
        ]);

        event(new Registered($user));
        $query = $user->save();
        
        
        if($query){
            $request->session()->flash('success','Your account has been created successfully');

            return redirect()->route('login');
        }

        else{
            return back()-> with('failed','Something went wrong. Please try again');
        }
    }

    public function emailVerificationNotice()
    {
        return view('auth.verifyEmail');
    }

    public function emailVerificationVerify(EmailVerificationRequest $request)
    {
        $request->fulfill();
        return redirect()->route('dashboard');
    }
 

Register.blade.php

 <form action="{{route('auth.store')}}" method="POST" id="user-registration" data-parsley-validate>
                        @csrf
                        
                        <div id="name-wrapper" class="form-group parsley-input">
                            <label>Full name<span class="tx-danger">*</span></label>
                            <input type="text" name="name" class="form-control" placeholder="Enter your full name"
                            data-parsley-class-handler="#name-wrapper" data-parsley-required-message="Please enter your full name"data-parsley-pattern="^[a-zA-Z s] $"
                            data-parsley-pattern-message="Numbers amp; special characters aren't allowed"required>
                            <p class="text-danger">@error('name'){{$message}}@enderror</p>
                        </div>
                        
                        <div id="email-wrapper" class="form-group parsley-input">
                            <label>Email address<span class="tx-danger">*</span></label>
                            <input type="email" name="email" class="form-control" placeholder="Enter your email address"
                            data-parsley-required-message="Please enter your email address" required  autocomplete="off">
                            <p class="text-danger">@error('email'){{$message}}@enderror</p>
                        </div>

                        <div id="password-wrapper" class="form-group parsley-input">
                            <label>Password<span class="tx-danger">*</span></label>
                            <input type="password" name="password" class="form-control" placeholder="Enter your password"
                            data-parsley-required-message="Please enter your password" data-parsley-pattern="^(?=.*d)(?=.*[a-zA-Z]).{8,}$"
                            data-parsley-pattern-message="Password must be 6-50 chars long, at least one letter amp; one number" required >
                            <p class="text-danger">@error('password'){{$message}}@enderror</p>
                        </div>

                        <div id="phone-wrapper" class="form-group parsley-input">
                            <label>Mobile number<span class="tx-danger">*</span></label>
                            <input type="tel" name="phone" id="user-phone" class="form-control" required>
                            <p id="phone-error-null" class="d-none">Please enter mobile number</p>
                            <p id="phone-error-msg" class="d-none"></p>
                            <p class="text-danger">@error('phone'){{$message}}@enderror</p>
                        </div>
        
                    
                        <div class="form-group tx-12">
                            By clicking <strong>Create an account</strong> below, you agree to our terms of service and privacy statement.
                        </div><!-- form-group -->
                        
                        <button type="submit" id="submit-registration" class="btn btn-brand-02 btn-block">Create Account</button>
                    </form>
 

.ENV Config

 MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=c1952edd7b2969
MAIL_PASSWORD=3376437f06507d
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=from@example.com
MAIL_FROM_NAME="${APP_NAME}"
 

Ответ №1:

на самом деле проблема возникает при переопределении функции getEmailForVerification().

итак, я рекомендовал вам создать файл MustVerifyEmail.php в модели затем скопируйте весь код из IlluminateContractsAuth MustVerifyEmail из этого файла и вставьте в новый файл. затем используйте свой код для нового файла, например

 public function getEmailForVerification()
    {
        return $this->user_email;
    }
 

и не забудьте изменить User.php файл
, подобный замене
используйте IlluminateContractsAuthMustVerifyEmail;
для
используйте App Models MustVerifyEmail;

Комментарии:

1. Я обновил свой код блейд-файла, там все в порядке. Я попытался переименовать свой input from email в user_email , как вы упомянули выше, но все равно ничего не получилось

2. @MusharrafKhan <тип ввода =»email» имя =»user_email» > ты сделал?

3. name=»user_email»

4. вы уверены.. когда вы регистрируете свое хранилище данных в БД

5. Я даже dd(return this->user_email) getEmailForVerification() пытаюсь перепроверить, получаю ли я адрес электронной почты пользователя, и да, я его получаю, но я не знаю, почему laravel не отправляет электронное письмо