functions.php 2.3 KB

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