aimojster/send_email.php

127 lines
5.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* SEND_EMAIL.PHP - Skripta za obdelavo in pošiljanje kontaktnega obrazca za AIMojster.si
* Last Updated: 16. September 2025
* Author: Gemini AI for AIMojster.si
*
* Ta skripta sprejme podatke v JSON formatu, jih validira, sanitizira
* in pošlje kot formatirano e-poštno sporočilo na določen naslov.
* Vrne JSON odgovor o uspešnosti operacije.
*/
//======================================================================
// 1. ZAČETNE NASTAVITVE IN VARNOST
//======================================================================
// Nastavimo glavo (header), da bo odgovor vedno v JSON formatu.
// To je ključno za pravilno delovanje na strani odjemalca (JavaScript).
header('Content-Type: application/json; charset=UTF-8');
// Varnostna preverba: Dovolimo samo metodo POST.
// S tem preprečimo, da bi kdo skripto klical neposredno preko brskalnika (z GET metodo).
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
// Pošljemo HTTP status 405 Method Not Allowed in sporočilo o napaki.
http_response_code(405);
echo json_encode(['success' => false, 'error' => 'Napačna metoda zahteve. Dovoljena je samo metoda POST.']);
exit; // Takoj prekinemo izvajanje skripte.
}
//======================================================================
// 2. SPREJEM IN DEKODIRANJE PODATKOV
//======================================================================
// Preberemo необdelane podatke iz telesa zahteve (request body).
// To je potrebno, ker JavaScript pošilja podatke kot JSON, ne kot klasičen form-data.
$json_payload = file_get_contents('php://input');
// Dekodiramo JSON niz v PHP asociativno polje.
// Drugi parameter `true` zagotovi, da dobimo polje namesto objekta.
$data = json_decode($json_payload, true);
// Preverimo, ali je prišlo do napake pri dekodiranju JSON-a.
if (json_last_error() !== JSON_ERROR_NONE) {
http_response_code(400); // Bad Request
echo json_encode(['success' => false, 'error' => 'Neveljaven JSON format podatkov.']);
exit;
}
//======================================================================
// 3. VALIDACIJA PREJETIH PODATKOV
//======================================================================
// Definiramo obvezna polja.
$required_fields = ['name', 'email', 'message', 'package'];
$errors = [];
foreach ($required_fields as $field) {
if (empty($data[$field])) {
$errors[] = "Polje '{$field}' je obvezno.";
}
}
// Posebej preverimo veljavnost e-poštnega naslova.
if (!empty($data['email']) && !filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
$errors[] = "Vneseni e-poštni naslov ni v veljavni obliki.";
}
// Če so se pojavile napake pri validaciji, jih vrnemo odjemalcu.
if (!empty($errors)) {
http_response_code(400); // Bad Request
echo json_encode(['success' => false, 'error' => implode(' ', $errors)]);
exit;
}
//======================================================================
// 4. SANITIZACIJA PODATKOV IN PRIPRAVA SPREMENLJIVK
//======================================================================
// Sanitiziramo vse prejete podatke, da preprečimo XSS napade in druge zlorabe.
// Uporabimo htmlspecialchars za kodiranje posebnih znakov in trim za odstranitev presledkov.
$name = htmlspecialchars(trim($data['name']));
$email = filter_var(trim($data['email']), FILTER_SANITIZE_EMAIL);
$phone = isset($data['phone']) ? htmlspecialchars(trim($data['phone'])) : 'Ni vneseno';
$package = htmlspecialchars(trim($data['package']));
$message = htmlspecialchars(trim($data['message']));
//======================================================================
// 5. SESTAVLJANJE IN POŠILJANJE E-POŠTNEGA SPOROČILA
//======================================================================
// --- Nastavitve E-pošte ---
$to_email = 'info@aimojster.si'; // **POMEMBNO: Vnesite vaš pravi e-poštni naslov!**
$subject = 'Novo povpraševanje s spletne strani AIMojster.si';
// --- Telo sporočila (Email Body) ---
// Uporabimo jasne oznake za preglednost.
$email_body = "Prejeli ste novo povpraševanje preko kontaktnega obrazca na spletni strani AIMojster.si.\n\n";
$email_body .= "--------------------------------------------------\n";
$email_body .= "Ime in priimek: " . $name . "\n";
$email_body .= "E-poštni naslov: " . $email . "\n";
$email_body .= "Telefonska številka: " . $phone . "\n";
$email_body .= "Izbrani paket: " . $package . "\n\n";
$email_body .= "Sporočilo:\n" . $message . "\n";
$email_body .= "--------------------------------------------------\n";
$email_body .= "To sporočilo je bilo poslano samodejno.";
// --- Glave sporočila (Email Headers) ---
// Pravilno nastavljene glave so ključne za zanesljivo dostavo in preprečevanje, da bi sporočilo končalo v vsiljeni pošti.
$headers = "From: no-reply@aimojster.si\r\n"; // Uporabite naslov z vaše domene.
$headers .= "Reply-To: " . $email . "\r\n"; // To vam omogoča, da direktno odgovorite pošiljatelju.
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers .= "X-Mailer: PHP/" . phpversion();
// --- Pošiljanje ---
// Uporabimo PHP funkcijo mail(). Če je pošiljanje uspešno, vrne true.
if (mail($to_email, $subject, $email_body, $headers)) {
// Pošiljanje je uspelo, vrnemo pozitiven odgovor.
echo json_encode(['success' => true]);
} else {
// Pošiljanje ni uspelo. Vrnemo napako.
http_response_code(500); // Internal Server Error
echo json_encode(['success' => false, 'error' => 'Napaka strežnika pri pošiljanju sporočila. Prosimo, poskusite kasneje.']);
}
exit; // Zaključimo izvajanje skripte.
?>