-1

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

@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

因此,当我单击激活/停用按钮时,我会触发控制器的激活用户功能。激活后,会发送一封电子邮件。控制器如下所示:

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');
}

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

我怎样才能做到这一点?

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

4

4 回答 4

1

文档中描述了发送电子邮件: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')

于 2018-07-24T09:45:31.590 回答
1

您应该在创建新的 activateUser 实例时传递用户电子邮件,如下所示

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

然后稍后使用此属性。

于 2018-07-24T09:46:00.503 回答
1

我通常希望我的电子邮件本身包含所有信息,所以我传递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 }},
...

注意:更改activateUserActivateUser遵循PSR-2

类名必须在StudlyCaps中声明。


我还使用排队的邮件,所以我在类上设置了$timeout$tries属性Mailable

于 2018-07-24T09:58:45.930 回答
1

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

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

    if($user->is_active == 0){
        $user->update([$user->is_active = 1]);
        Mail::to($user->email)->send(new MailableClassInstance);
    }
    
于 2018-07-24T10:02:37.467 回答