hermina/api/send_mail.php

141 lines
5.3 KiB
PHP

<?php
// Omogočimo prikazovanje napak za lažje razhroščevanje med razvojem.
// V produkciji to zakomentirajte ali nastavite na 0.
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// Uvozimo potrebne PHPMailer razrede v globalni imenski prostor.
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
// Vključimo datoteke knjižnice PHPMailer.
// Pot je relativna na lokacijo te skripte (api/send_mail.php).
require 'phpmailer/Exception.php';
require 'phpmailer/PHPMailer.php';
require 'phpmailer/SMTP.php';
// Vključimo našo varno konfiguracijsko datoteko z gesli.
require 'config.php';
// Nastavimo glavo (header) odgovora, da bo brskalnik vedel, da pričakuje JSON.
header('Content-Type: application/json');
// Pripravimo privzet odgovor. Če pride do napake pred pošiljanjem, bo to poslano nazaj.
$response = ['success' => false, 'message' => 'Neznana napaka. Prosimo, kontaktirajte administratorja.'];
// 1. KORAK: 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') {
$response['message'] = 'Nedovoljen dostop.';
echo json_encode($response);
exit;
}
// 2. KORAK: Preberemo JSON podatke, ki jih je poslal JavaScript (fetch).
// Standardna PHP spremenljivka $_POST ne deluje za JSON vsebino.
$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'])) {
$response['message'] = 'Manjkajoči podatki. Prosimo, izpolnite vsa polja.';
echo json_encode($response);
exit;
}
// 3. KORAK: Očistimo in validiramo prejete podatke.
$name = trim($data['name']);
$email = trim($data['email']);
$message = trim($data['message']);
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;
}
// 4. KORAK: 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) ===
// Za razhroščevanje - prikaže podroben izpis dogajanja. V produkciji nastavite 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';
// Sestavimo telo sporočila.
$mail->Body = "Prejeli ste novo sporočilo preko kontaktnega obrazca.\n\n" .
"==================================================\n" .
"Ime in priimek: " . $name . "\n" .
"E-mail naslov: " . $email . "\n" .
"==================================================\n\n" .
"Sporočilo:\n" .
"--------------------------------------------------\n" .
$message . "\n" .
"--------------------------------------------------\n";
// 5. KORAK: Pošljemo e-sporočilo.
$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.
$response['success'] = false;
$response['message'] = 'Sporočila ni bilo mogoče poslati. Prosimo, poskusite znova kasneje.';
// 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: " . $mail->ErrorInfo);
}
// 6. KORAK: Pošljemo JSON odgovor nazaj JavaScriptu.
echo json_encode($response);
?>