Laravel 发送电子邮件到数据库中的地址

Laravel send email to address from database

在我的索引视图中,我显示了所有用户,并且有一个按钮可以将用户状态更改为活动和非活动。代码如下所示:

@foreach($users as $user)
    <tr>
        <td>{{$user->name}}</td>
        <td>{{$user->surname}}</td>
        <td>{{$user->email}}</td>
        <td>
            @if($user->is_active == 0)
                {!! Form::model($user, ['method' => 'PUT', 'action'=>['AdminUserController@activateuser', $user->id]]) !!}
                    {!! Form::submit('Activate', ['class'=>'btn btn-primary']) !!}
                {!! Form::close() !!}
            @else
                {!! Form::model($user, ['method' => 'PUT', 'action'=>['AdminUserController@activateuser', $user->id]]) !!}
                    {!! Form::submit('De-Activate', ['class'=>'btn btn-danger']) !!}
                {!! Form::close() !!}
            @endif
        </td>
        <td>{{$user->cell}}</td>
        <td><button class="btn btn-primary">View Property</button></td>
        <td><button class="btn btn-danger">Delete</button></td>
    </tr>
@endforeach

所以当我点击 activate/deactivate 按钮时,我触发了控制器的 activateuser 功能。激活后,会发送一封电子邮件。 控制器看起来像这样:

public function activateuser(Request $request, $id){
    $user = User::findOrFail($id);
    if($user->is_active == 0){
        $user->update([$user->is_active = 1]);
        Mail::send(new activateUser());
    }
    else{
        $user->update([$user->is_active = 0]);
    }
    return redirect()->back();
}

目前邮件是发给我自己的,我的 Mailabçe 看起来像这样:

public function build()
{
    return $this->view('emails.activateuser')->to('wosleybago@gmail.com');
}

我想要的是将电子邮件发送到数据库中用户电子邮件的电子邮件地址 table。

我该怎么做?

所以,我应该得到 $user->email

文档中描述了发送电子邮件:https://laravel.com/docs/5.6/mail#sending-mail

将此代码放入 activateUser() 函数中

Mail::to($user)->send(new YourMailableName());

不要忘记使用 "use" 关键字导入 Mail 和 YourMailableName。

或者您可以使用用户电子邮件代替对象

Mail::to($user->email)->send(new YourMailableName());

并从您的 Mailable/

中删除 ->to('wosleybago@gmail.com')

你应该在创建新的activateUser实例时传入用户邮箱,像这样

 Mail::send(new activateUser($user->email));

以后再用这个属性。

我通常希望我的电子邮件在 本身 中包含所有信息,因此我传递 User 实例或任何包含撰写邮件所需数据的实例。

所以 Mailable__construct(..) 这样的:

/**
 * @var \App\User
 */
public $user; // since this is a public property its going to be available in view of mailable as $user

__construct(App\User $user) {
    $this->user = $user;

    // further more I set the to(), this is what you are after
    $this->to($user->email, $user->name);

    // and subject
    $this->subject('You are activated!');
}

...

现在您需要在控制器中执行以下操作:

Mail::send(new activateUser($user));

如上所述,$user 在邮件视图中可用,因此您也可以在那里使用它:

Hi, {{ $user->name }},
...

Note: change the activateUser to ActivateUser to follow PSR-2

Class names MUST be declared in StudlyCaps.


我也使用队列邮件,所以我在 Mailable class.

上设置了 $timeout$tries 属性

向特定的人发送电子邮件非常简单。我的建议如下:

  • 稍后使用队列发送邮件,因为从控制器响应到查看需要一些时间。
  • 在现有代码中,您可以获得当前用户的电子邮件,并使用 laravel 的邮件功能附带的助手 to() 发送它。 你可以这样编码。

    if($user->is_active == 0){
        $user->update([$user->is_active = 1]);
        Mail::to($user->email)->send(new MailableClassInstance);
    }