mailer.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. // Αρχείο: /var/www/html/hockey-cms/includes/mailer.php
  3. use PHPMailer\PHPMailer\PHPMailer;
  4. use PHPMailer\PHPMailer\Exception;
  5. function sendTemplateEmail($pdo, $template_key,$to_email, $placeholders,$lang = 'el') {
  6. if (empty($to_email)) return false;
  7. // 1. Φόρτωση SMTP ρυθμίσεων από τη βάση (πίνακας settings)
  8. try {
  9. $settingsStmt =$pdo->query("SELECT `key`, `value` FROM settings WHERE `key` LIKE 'smtp_%' OR `key` LIKE 'mail_from_%'");
  10. $smtp_settings =$settingsStmt->fetchAll(PDO::FETCH_KEY_PAIR);
  11. } catch (Exception $e) {$smtp_settings = [];
  12. }
  13. // 2. Φόρτωση Template από τη βάση (πίνακας email_templates)
  14. try {
  15. $tplStmt =$pdo->prepare("SELECT * FROM email_templates WHERE template_key = ?");
  16. $tplStmt->execute([$template_key]);
  17. $tpl =$tplStmt->fetch(PDO::FETCH_ASSOC);
  18. } catch (Exception $e) {$tpl = false;
  19. }
  20. if (!$tpl) return false;
  21. $subject = ($lang === 'en') ? $tpl['subject_en'] :$tpl['subject_el'];
  22. $body = ($lang === 'en') ? $tpl['body_en'] :$tpl['body_el'];
  23. // 3. Αντικατάσταση μεταβλητών (placeholders) π.χ. {order_id}, {customer_name}
  24. foreach ($placeholders as $key =>$val) {
  25. $subject = str_replace('{' .$key . '}', $val,$subject);
  26. $body = str_replace('{' .$key . '}', $val,$body);
  27. }
  28. // 4. Αποστολή με PHPMailer
  29. require_once __DIR__ . '/../vendor/autoload.php';
  30. $mail = new PHPMailer(true);
  31. try {
  32. $mail->isSMTP();$mail->Host = $smtp_settings['smtp_host'] ?? '';$mail->SMTPAuth = true;
  33. $mail->Username =$smtp_settings['smtp_username'] ?? '';
  34. $mail->Password =$smtp_settings['smtp_password'] ?? '';
  35. $encryption =$smtp_settings['smtp_encryption'] ?? 'tls';
  36. $mail->SMTPSecure = ($encryption === 'ssl') ? PHPMailer::ENCRYPTION_SMTPS : PHPMailer::ENCRYPTION_STARTTLS;
  37. $mail->Port = (int)($smtp_settings['smtp_port'] ?? 587);$mail->CharSet = 'UTF-8';
  38. $from_email =$smtp_settings['mail_from_address'] ?? 'info@hockeycms.com';
  39. $from_name = $smtp_settings['mail_from_name'] ?? 'Hockey CMS';$mail->setFrom($from_email,$from_name);
  40. $mail->addAddress($to_email);
  41. $mail->isHTML(true);
  42. $mail->Subject =$subject;
  43. $mail->Body = nl2br($body);
  44. return $mail->send();
  45. } catch (Exception $e) {
  46. return false;
  47. }
  48. }