validate(['newsletter_email' => 'required|email|max:255']); $email = strtolower($request->input('newsletter_email')); $existing = NewsletterSubscriber::where('email', $email)->first(); if ($existing && $existing->isConfirmed()) { return back()->with('newsletter_info', 'Diese E-Mail-Adresse ist bereits angemeldet.'); } $token = Str::random(64); if ($existing) { $existing->update(['token' => $token]); } else { NewsletterSubscriber::create(['email' => $email, 'token' => $token]); } $confirmUrl = route('newsletter.confirm', $token); $shopName = \App\Models\Setting::get('shop_name', 'Shop'); Mail::raw( "Bitte bestätigen Sie Ihre Newsletter-Anmeldung:\n\n{$confirmUrl}\n\n" . "Falls Sie sich nicht angemeldet haben, können Sie diese E-Mail ignorieren.\n\n" . "– {$shopName}", fn($m) => $m->to($email)->subject("Newsletter-Anmeldung bestätigen – {$shopName}") ); return back()->with('newsletter_success', 'Bitte prüfen Sie Ihren Posteingang und bestätigen Sie die Anmeldung.'); } public function confirm(string $token) { $subscriber = NewsletterSubscriber::where('token', $token)->whereNull('confirmed_at')->first(); if (!$subscriber) { return redirect('/')->with('error', 'Ungültiger oder bereits verwendeter Bestätigungslink.'); } $subscriber->update(['confirmed_at' => now(), 'token' => null]); return redirect('/')->with('success', 'Newsletter-Anmeldung erfolgreich bestätigt!'); } }