false, 'message' => 'Neznana napaka. Prosimo, kontaktirajte administratorja.']; // === KORAK 1: PREVERJANJE METODE ZAHTEVE === // Preverimo, ali je bila zahteva poslana z metodo POST. // S tem preprečimo, da bi kdo do skripte dostopal neposredno preko URL-ja. if ($_SERVER['REQUEST_METHOD'] !== 'POST') { http_response_code(405); // Method Not Allowed $response['message'] = 'Nedovoljen dostop. Uporabite metodo POST.'; echo json_encode($response); exit; } // === KORAK 2: BRANJE IN VALIDACIJA VSEBINE === // Preberemo JSON podatke, ki jih je poslal JavaScript (fetch). $json_data = file_get_contents('php://input'); $data = json_decode($json_data, true); // Preverimo, če so podatki pravilno dekodirani in če vsebujejo vse potrebne ključe. if (!$data || !isset($data['name']) || !isset($data['email']) || !isset($data['message'])) { http_response_code(400); // Bad Request $response['message'] = 'Manjkajoči podatki. Prosimo, izpolnite vsa polja.'; echo json_encode($response); exit; } // === KORAK 3: ČIŠČENJE IN VALIDACIJA PODATKOV === // Uporabimo trim za odstranitev odvečnih presledkov. $name = trim($data['name']); $email = trim($data['email']); $message = trim($data['message']); // Validacija posameznih polj. if (empty($name)) { $response['message'] = 'Prosimo, vnesite vaše ime in priimek.'; echo json_encode($response); exit; } if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $response['message'] = 'Prosimo, vnesite veljaven e-poštni naslov.'; echo json_encode($response); exit; } if (empty($message)) { $response['message'] = 'Prosimo, vnesite vaše sporočilo.'; echo json_encode($response); exit; } // === KORAK 4: INICIALIZACIJA IN KONFIGURACIJA PHPMAILER === // Ustvarimo novo instanco PHPMailer. // `true` v konstruktorju omogoči izjeme (exceptions), kar je boljši način za obravnavo napak. $mail = new PHPMailer(true); try { // --- Nastavitve strežnika (uporabimo konstante iz config.php) --- // !!! KLJUČNO ZA RAZHROŠČEVANJE !!! // Ta nastavitev bo v odgovoru (Response) v brskalnikovem zavihku "Network" // izpisala celotno komunikacijo med vašim strežnikom in SMTP strežnikom. // Tako boste natančno videli, kje in zakaj pride do napake. // V produkciji to nastavite nazaj na: SMTP::DEBUG_OFF $mail->SMTPDebug = SMTP::DEBUG_SERVER; $mail->isSMTP(); $mail->Host = SMTP_HOST; $mail->SMTPAuth = true; $mail->Username = SMTP_USERNAME; $mail->Password = SMTP_PASSWORD; $mail->SMTPSecure = SMTP_SECURE; $mail->Port = SMTP_PORT; // Nastavimo kodiranje znakov na UTF-8 za pravilno podporo šumnikom. $mail->CharSet = 'UTF-8'; // --- Prejemniki --- // Pošiljatelj: To mora biti naslov, s katerim se prijavljate (info@herminamerc.si). // Ime pošiljatelja pa je ime, ki ga je vpisala oseba v obrazec. $mail->setFrom(SMTP_USERNAME, $name); // Prejemnik: To ste vi (lastnik spletne strani). $mail->addAddress(SMTP_USERNAME, 'Hermina Merc - Spletna Stran'); // Naslov za odgovor (Reply-To): KLJUČEN DEL! // To nastavimo na e-mail osebe, ki je izpolnila obrazec. // Ko boste v vašem e-mail klientu kliknili "Odgovori", boste odgovorili neposredno tej osebi. $mail->addReplyTo($email, $name); // --- Vsebina e-sporočila --- $mail->isHTML(false); // Pošljemo kot navadno besedilo, ne HTML. $mail->Subject = 'Novo sporočilo s spletne strani herminamerc.si od: ' . $name; // Sestavimo telo sporočila. Uporabimo htmlspecialchars za preprečitev morebitnih težav. $bodyName = htmlspecialchars($name); $bodyEmail = htmlspecialchars($email); $bodyMessage = htmlspecialchars($message); $mail->Body = "Prejeli ste novo sporočilo preko kontaktnega obrazca.\n\n" . "==================================================\n" . "Ime in priimek: " . $bodyName . "\n" . "E-mail naslov: " . $bodyEmail . "\n" . "==================================================\n\n" . "Sporočilo:\n" . "--------------------------------------------------\n" . $bodyMessage . "\n" . "--------------------------------------------------\n"; // === KORAK 5: POŠILJANJE E-SPOROČILA === $mail->send(); // Če je pošiljanje uspelo, pripravimo uspešen odgovor. $response['success'] = true; $response['message'] = 'Hvala za vaše sporočilo! Odgovorili vam bomo v najkrajšem možnem času.'; } catch (Exception $e) { // Če je prišlo do napake med pošiljanjem, jo ujamemo. // V odgovor vključimo podrobno sporočilo o napaki iz PHPMailerja. http_response_code(500); // Internal Server Error $response['success'] = false; $response['message'] = 'Sporočila ni bilo mogoče poslati. Napaka strežnika: ' . $mail->ErrorInfo; // Za razhroščevanje: zabeležimo dejansko napako v strežniški log (ne prikažemo je uporabniku). // Na strežniku omogočite pisanje v error log. error_log("PHPMailer napaka: " . $e->getMessage()); } // === KORAK 6: POŠILJANJE ODGOVORA === // Pošljemo JSON odgovor nazaj JavaScriptu. echo json_encode($response); ?>