127 lines
5.5 KiB
PHP
127 lines
5.5 KiB
PHP
<?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.
|
||
|
||
?>
|