diff --git a/api/send_mail.php b/api/send_mail.php index 2ab3c48..fda3533 100644 --- a/api/send_mail.php +++ b/api/send_mail.php @@ -1,11 +1,10 @@ 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.'; @@ -42,11 +37,9 @@ if ($_SERVER['REQUEST_METHOD'] !== 'POST') { // === 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.'; @@ -56,12 +49,10 @@ if (!$data || !isset($data['name']) || !isset($data['email']) || !isset($data['m // === 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); @@ -82,19 +73,14 @@ if (empty($message)) { // === 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) --- + // --- Nastavitve strežnika --- - // !!! 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; + // !!! POMEMBNO: Način za razhroščevanje je sedaj IZKLOPLJEN !!! + // S tem zagotovimo, da skripta vrne samo čist JSON odgovor. + $mail->SMTPDebug = SMTP::DEBUG_OFF; $mail->isSMTP(); $mail->Host = SMTP_HOST; @@ -104,28 +90,17 @@ try { $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->isHTML(false); $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); @@ -143,25 +118,20 @@ try { // === 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()); + // V produkciji ne izpisujemo podrobne napake uporabniku, ampak jo zabeležimo. + $response['message'] = 'Sporočila ni bilo mogoče poslati. Prosimo, poskusite znova kasneje ali kontaktirajte administratorja.'; + + // Zabeležimo dejansko napako v strežniški log. + error_log("PHPMailer napaka: " . $mail->ErrorInfo); } // === KORAK 6: POŠILJANJE ODGOVORA === - -// Pošljemo JSON odgovor nazaj JavaScriptu. echo json_encode($response); ?> \ No newline at end of file