* @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0 */ namespace App\Jobs; use App\Http\Middleware\RateLimitOutboundMail; use App\Mail\DisableUser; use App\Models\User; use DateTime; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Mail; class SendDisableUserMail implements ShouldQueue { use Dispatchable; use InteractsWithQueue; use Queueable; use SerializesModels; /** * The number of times the job may be attempted. */ public int $tries = 3; /** * SendDisableUserMail Constructor. */ public function __construct(public User $user) { } /** * Get the middleware the job should pass through. * * @return array */ public function middleware(): array { return [new RateLimitOutboundMail()]; } /** * Execute the job. */ public function handle(): void { if ($this->attempts() > 2) { $this->delay(min(30 * $this->attempts(), 300)); } Mail::to($this->user)->send(new DisableUser($this->user->email)); } /** * Determine the time at which the job should timeout. */ public function retryUntil(): DateTime { return now()->addHours(2); } }