使用MailGun,Notification - Laravel 5.4发送电子邮件通知

时间:2017-02-14 01:55:25

标签: php email laravel-5 notifications laravel-5.4

我正在尝试在Laravel中首次使用通知和mailgun服务。我正在使用Laravel 5.4

我看到Laravel 5.2+附带了一个名为Notification的新功能,可以很好地处理密码重置等。

所以我打算向用户发送电子邮件以供以下人员使用:

1)第一次用户注册时

2)当用户请求密码重置时

3)用户报告问题时

4)当用户发送朋友请求时

5)最后,当用户接受朋友请求时。

我有点困惑,并且忘记了如何进行此操作。 MailGun已全部设置好,此时我可以使用Postman向用户发送测试电子邮件,而不会在图片中显示通知。我还设置了Notification服务,并有两件事情:

我不明白通知和邮件如何协同工作?或者我应该坚持任何人?

我在密码重设表单中输入电子邮件时出现错误。

错误

ReflectionException in Container.php line 681:
Class App\Http\Controllers\ResetPasswordController does not exist

表格

<form id="msform"  role="form" method="POST" action="{{ url('/api/reset') }}">
                        {{ csrf_field() }}

                        <fieldset>
                        <h2 class="fs-title">Enter Password Reset Details</h2>
                        <h3 class="fs-subtitle">Easy as That !</h3>

                        <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control" name="email" placeholder="Email Address" value="{{ old('email') }}" required>

                                @if ($errors->has('email'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('email') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group">
                            <input type="submit" name="submit" class="submit action-button" value="Reset"/>
                        </div>
                     </fieldset>
    </form>

路线

Route::post('api/reset', 'ResetPasswordController@send');

ResetPassword Controller

public function send(Request $request)
{
    $user = Auth::user()->email;
    $user->notify(new WelcomeUser());

    Mail::send('emails.passwordreset', function ($message)
    {
        $message->from('admin@abc.com', 'Admin - John Doe');
        $message->to('johndoe@gmail.com');
        $message->subject('Password Reset');
    });

    return response()->json(['message' => 'Request completed']);      
}

用户模型

use Illuminate\Notifications\Notifiable;

public function routeNotificationForMail()
{
    return $this->email;
}

通知

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class WelcomeUser extends Notification
{
    use Queueable;


    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct()
    {

    }

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

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->line("Welcome User!")
                    ->action('Let\'s Login', route('auth.login'))
                    ->line("Let's get going!");
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

1 个答案:

答案 0 :(得分:0)

当然,您可以一起使用邮件通知和邮件。在通知中,您只需创建视图刀片文件即可。所有邮件通知都使用相同的视图模板。您也可以使用邮件通知替换部分邮件。

至于具体实施:

假设您使用的是Laravel auth脚手架控制器,请在路线中添加Auth\

Route::post('api/reset', 'Auth\ResetPasswordController@send');

此外,PasswordResetController无法访问Auth::user(),因此在send()函数中将第一行替换为:

$user = User::where('email', $request->email)->first();

然后在WelcomeUser通知中,从您的路线中删除auth.

->action('Let\'s Login', route('login'))

另外在Mail :: send()函数中添加[]作为第二个参数。