Search by

ithilbert / kontaktformular

ithilbert

Mein Kontaktformular mit Verarbeitungscode

Package info

github.com/ITHilbert/kontaktformular

Homepage

pkg:composer/ithilbert/kontaktformular

Statistics

Installs: 121

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

2.0.0 2026-03-24 19:35 UTC

This package is auto-updated.

Last update: 2026-10-23 09:10:13 UTC


README

Beschreibung: Kontaktformular mit Spam-Schutz, optionalem Datei-Upload und Mail-Versand.

Features

  • Felder: Name, E-Mail, Telefon (optional), Nachricht, Datei-Anhang (optional)
  • Spam-Schutz: Honeypot-Feld + Mindest-Nachrichtenlänge + Rate-Limit (throttle:6,1)
  • Datei-Upload mit Whitelist (pdf,jpg,png,zip,doc,docx,xls,xlsx), automatisches Zippen
  • Token-basierter Download-Link mit Hash + Name + ID
  • Cleanup-Command für alte Dateien (kontaktformular:delete_old_files)

Installation

composer require ithilbert/kontaktformular
php artisan vendor:publish --tag=kontaktformular-config
php artisan migrate

Konfiguration

// config/kontaktformular.php
return [
    'mailFrom'        => env('KONTAKTFORMULAR_MAIL_FROM', env('MAIL_FROM_ADDRESS')),
    'mailTo'          => env('KONTAKTFORMULAR_MAIL_TO',   env('MAIL_TO_ADDRESS')),
    'subject'         => env('KONTAKTFORMULAR_SUBJECT', 'Anfrage von ' . env('APP_NAME')),
    'fileDownloadUrl' => env('APP_URL') . '/kontaktformular/file/',
    'dateien_loeschen_nach_tagen'  => env('KONTAKTFORMULAR_DATEIEN_LOESCHEN_NACH_TAGEN', 30),
    'anfragen_loeschen_nach_tagen' => env('KONTAKTFORMULAR_ANFRAGEN_LOESCHEN_NACH_TAGEN'),
];

Löschfristen

Einstellung (.env) Standard Wirkung
KONTAKTFORMULAR_DATEIEN_LOESCHEN_NACH_TAGEN 30 Anhänge älter als die Frist werden gelöscht, die Anfrage bleibt (file_deleted_at wird gesetzt).
KONTAKTFORMULAR_ANFRAGEN_LOESCHEN_NACH_TAGEN nicht gesetzt Anfragen älter als die Frist werden samt Anhang gelöscht. Ohne Wert bleiben Anfragen dauerhaft erhalten.

Beide Werte müssen positive ganze Zahlen sein. Bei ungültigem Wert bricht der Command mit Fehlermeldung ab (Exit-Code 1) und löscht nichts.

Achtung: KONTAKTFORMULAR_DATEIEN_LOESCHEN_NACH_TAGEN= ohne Wert gilt als ungültig – dann stoppt auch die Löschung der Anhänge. Die Zeile entweder mit Zahl setzen oder ganz weglassen.

Anhänge liegen unter storage/app/kontaktformular/. Zeigt die Disk local des Projekts auf storage/app/private (Laravel-11-Skelett), findet der Command die Dateien dort nicht.

Command

php artisan kontaktformular:delete_old_files

Löscht zuerst die Anfragen nach der Anfragenfrist, danach die Anhänge nach der Dateifrist, und gibt die Zahl gelöschter Anhänge und Anfragen aus. Eine bereits fehlende Anhang-Datei ist kein Fehler.

Wichtig: Das Paket plant den Command nicht selbst ein. Das Projekt muss ihn im Scheduler eintragen, z. B. Schedule::command('kontaktformular:delete_old_files')->daily();.

Routen

Route::post('anfrage', [KontaktformularController::class, 'anfrage'])->name('anfrage');
Route::get('danke-formular', [KontaktformularController::class, 'danke_formular'])->name('danke_formular');
Route::get('danke-bot-formular', [KontaktformularController::class, 'danke_bot_formular'])->name('danke_bot_formular');
Route::get('kontaktformular/file/{hash}/{name}/{id}', [KontaktformularController::class, 'file_download'])->name('kontaktformular.file');

Views

Im Hauptprojekt müssen layouts.master und layouts.masterBot existieren.

Namespace

ITHilbert\Kontaktformular