file($file['tmp_name']);
$allowedTypes = [
'image/jpeg' => 'jpg',
'image/png' => 'png',
'image/webp' => 'webp',
'image/gif' => 'gif'
];
if (!array_key_exists($mimeType, $allowedTypes)) {
$errors[] = 'Die Datei "' . htmlspecialchars($file['name']) . '" ist kein unterstütztes Bildformat.';
return null;
}
ensureDirectory($targetDir);
$extension = $allowedTypes[$mimeType];
$filename = sanitizeFileName(pathinfo($file['name'], PATHINFO_FILENAME));
if ($filename === '') {
$filename = 'upload_' . time();
}
$destination = rtrim($targetDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $filename . '_' . uniqid() . '.' . $extension;
if (!move_uploaded_file($file['tmp_name'], $destination)) {
$errors[] = 'Die Datei "' . htmlspecialchars($file['name']) . '" konnte nicht gespeichert werden.';
return null;
}
return [
'path' => $destination,
'original' => $file['name'],
'type' => $mimeType
];
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$company = trim($_POST['company'] ?? '');
$contactEmail = filter_var($_POST['email'] ?? '', FILTER_VALIDATE_EMAIL) ? $_POST['email'] : '';
$website = trim($_POST['website'] ?? '');
$message = trim($_POST['message'] ?? '');
$bannerLink = trim($_POST['banner_link'] ?? '');
if ($company === '') {
$errors[] = 'Bitte geben Sie den Namen Ihres Unternehmens oder Projekts an.';
}
if ($contactEmail === '') {
$errors[] = 'Bitte geben Sie eine gültige E-Mail-Adresse an.';
}
if ($bannerLink === '') {
$errors[] = 'Bitte geben Sie den Link an, der Ihrem Banner zugeordnet werden soll.';
}
$uploadedImage = handleUpload('project_image', __DIR__ . '/uploads/images', $errors);
$uploadedBanner = handleUpload('banner_image', __DIR__ . '/uploads/banners', $errors);
if (!$errors) {
$boundary = '=_TinyHome_' . md5((string) microtime(true));
$headers = [];
$fromAddress = $contactEmail ?: 'no-reply@tinyhome.local';
$headers[] = 'From: ' . $fromAddress;
$headers[] = 'Reply-To: ' . $fromAddress;
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-Type: multipart/mixed; boundary="' . $boundary . '"';
$bodyParts = [];
$text = "Neue TinyHome-Anfrage\n\n";
$text .= "Unternehmen/Projekt: $company\n";
$text .= "Kontakt-E-Mail: $contactEmail\n";
if ($website !== '') {
$text .= "Website: $website\n";
}
$text .= "Banner-Link: $bannerLink\n\n";
if ($message !== '') {
$text .= "Nachricht:\n$message\n\n";
}
if ($uploadedImage) {
$text .= 'Projektbild gespeichert unter: ' . $uploadedImage['path'] . "\n";
}
if ($uploadedBanner) {
$text .= 'Banner gespeichert unter: ' . $uploadedBanner['path'] . "\n";
}
$bodyParts[] = '--' . $boundary;
$bodyParts[] = 'Content-Type: text/plain; charset="UTF-8"';
$bodyParts[] = 'Content-Transfer-Encoding: 8bit';
$bodyParts[] = '';
$bodyParts[] = $text;
foreach ([$uploadedImage, $uploadedBanner] as $upload) {
if (!$upload) {
continue;
}
$fileContent = file_get_contents($upload['path']);
if ($fileContent === false) {
$errors[] = 'Die Datei "' . htmlspecialchars($upload['original']) . '" konnte nicht für den Mailversand gelesen werden.';
continue;
}
$bodyParts[] = '--' . $boundary;
$bodyParts[] = 'Content-Type: ' . $upload['type'] . '; name="' . sanitizeFileName($upload['original']) . '"';
$bodyParts[] = 'Content-Transfer-Encoding: base64';
$bodyParts[] = 'Content-Disposition: attachment; filename="' . sanitizeFileName($upload['original']) . '"';
$bodyParts[] = '';
$bodyParts[] = chunk_split(base64_encode($fileContent));
}
$bodyParts[] = '--' . $boundary . '--';
$body = implode("\r\n", $bodyParts);
if (!$errors) {
$mailSent = mail(
$recipient,
'Neue TinyHome-Anfrage von ' . $company,
$body,
implode("\r\n", $headers)
);
if ($mailSent) {
$successMessage = 'Vielen Dank! Ihre Anfrage wurde erfolgreich übermittelt.';
} else {
$errors[] = 'Ihre Anfrage konnte leider nicht versendet werden. Bitte versuchen Sie es später erneut.';
}
}
}
}
?>
TinyHome Plattform – Natürlich. Minimalistisch. Erschwinglich.
Warum TinyHomes?
Naturnah leben
Unsere Plattform bündelt Anbieter, die nachhaltige Materialien und ökologische Bauweisen priorisieren.
Minimale Baukosten
Smarter Grundriss, effiziente Energie, faire Preise: TinyHomes machen Wohnen wieder erschwinglich.
Flexibel kombinierbar
Vom Wochenend-Retreat bis zum ganzjährigen Zuhause – konfigurieren Sie Ihr TinyHome passend zu Ihrem Lebensstil.
Direkter Kontakt
Sie erhalten maßgeschneiderte Angebote von geprüften Hersteller:innen aus der DACH-Region.
Projekt vorstellen & Banner übermitteln
Übermitteln Sie uns Ihr TinyHome-Konzept – inklusive Banner-Link, damit wir Bestellungen eindeutig zuordnen können. Wir melden uns persönlich bei Ihnen.