mirror of
https://github.com/xodivorce/mailer-dev-console.git
synced 2025-12-18 15:22:56 +05:30
108 lines
3.9 KiB
PHP
108 lines
3.9 KiB
PHP
<?php
|
|
|
|
use PHPMailer\PHPMailer\PHPMailer;
|
|
use PHPMailer\PHPMailer\Exception;
|
|
|
|
require_once __DIR__ . '/../../config/env.php';
|
|
require_once __DIR__ . '/templates/loader.php';
|
|
|
|
/**
|
|
* Build and optionally send mail from a file-based template.
|
|
*/
|
|
function sendMailFromTemplate(string $templateKey, bool $previewOnly = false): bool
|
|
{
|
|
$mail = new PHPMailer(true);
|
|
|
|
$email = $_ENV['MAIL_TO'];
|
|
$username = $_ENV['USERNAME'];
|
|
|
|
try {
|
|
$mail->isSMTP();
|
|
$mail->Host = $_ENV['MAIL_HOST'];
|
|
$mail->SMTPAuth = true;
|
|
$mail->Username = $_ENV['MAIL_USERNAME'];
|
|
$mail->Password = $_ENV['MAIL_PASSWORD'];
|
|
$mail->SMTPSecure = $_ENV['MAIL_ENCRYPTION'];
|
|
$mail->Port = (int) $_ENV['MAIL_PORT'];
|
|
|
|
$mail->setFrom($_ENV['MAIL_FROM'], $_ENV['MAIL_FROM_NAME']);
|
|
$mail->addAddress($email, $username);
|
|
|
|
$domain = $_ENV['DOMAIN'] ?? 'UNKNOWN DOMAIN';
|
|
$company = $_ENV['COMPANY_NAME'] ?? 'UNKNOWN COMPANY';
|
|
$github = $_ENV['GITHUB'] ?? 'UNKNOWN GITHUB';
|
|
$website = $_ENV['WEBSITE'] ?? 'UNKNOWN WEBSITE';
|
|
$projectStartYear = $_ENV['PROJECT_START_YEAR'] ?? 2025;
|
|
$currentYear = (int) date('Y');
|
|
$startYear = min((int) $projectStartYear, $currentYear);
|
|
$yearText = ($currentYear > $startYear)
|
|
? $startYear . '-' . substr((string) $currentYear, -2)
|
|
: $startYear;
|
|
|
|
// context passed to template files
|
|
$ctx = [
|
|
'email' => $email,
|
|
'username' => $username,
|
|
'domain' => $domain,
|
|
'company' => $company,
|
|
'github' => $github,
|
|
'website' => $website,
|
|
'yearText' => $yearText,
|
|
];
|
|
|
|
// 🔥 load subject + body from the selected template file
|
|
$tpl = loadMailTemplate($templateKey, $ctx);
|
|
|
|
$mail->CharSet = 'UTF-8';
|
|
$mail->Encoding = 'base64';
|
|
$mail->isHTML(true);
|
|
$mail->Subject = $tpl['subject'];
|
|
$mail->Body = $tpl['body'];
|
|
|
|
// expose everything for preview
|
|
$GLOBALS['MAIL_PREVIEW_SUBJECT'] = $mail->Subject;
|
|
$GLOBALS['MAIL_PREVIEW_BODY'] = $mail->Body;
|
|
$GLOBALS['MAIL_PREVIEW_TO'] = $email;
|
|
$GLOBALS['MAIL_PREVIEW_USERNAME'] = $username;
|
|
$GLOBALS['MAIL_PREVIEW_DOMAIN'] = $domain;
|
|
$GLOBALS['MAIL_PREVIEW_COMPANY'] = $company;
|
|
$GLOBALS['MAIL_PREVIEW_FROM'] = $_ENV['MAIL_FROM'];
|
|
$GLOBALS['MAIL_PREVIEW_FROM_NAME'] = $_ENV['MAIL_FROM_NAME'];
|
|
|
|
$GLOBALS['MAIL_PREVIEW_MAIL_HOST'] = $_ENV['MAIL_HOST'] ?? null;
|
|
$GLOBALS['MAIL_PREVIEW_MAIL_USERNAME'] = $_ENV['MAIL_USERNAME'] ?? null;
|
|
$GLOBALS['MAIL_PREVIEW_MAIL_PORT'] = $_ENV['MAIL_PORT'] ?? null;
|
|
$GLOBALS['MAIL_PREVIEW_MAIL_ENCRYPTION'] = $_ENV['MAIL_ENCRYPTION'] ?? null;
|
|
$GLOBALS['MAIL_PREVIEW_PROJECT_START'] = $startYear;
|
|
$GLOBALS['MAIL_PREVIEW_CURRENT_YEAR'] = $currentYear;
|
|
$GLOBALS['MAIL_PREVIEW_MAIL_PASSWORD'] = empty($_ENV['MAIL_PASSWORD']) ? 'not set' : '•••• (configured)';
|
|
|
|
// template info for UI
|
|
$GLOBALS['MAIL_PREVIEW_TEMPLATE_KEY'] = $tpl['key'];
|
|
$GLOBALS['MAIL_PREVIEW_TEMPLATE_LABEL'] = $tpl['label'];
|
|
$GLOBALS['MAIL_PREVIEW_TEMPLATES_INDEX'] = getMailTemplatesIndex($ctx);
|
|
|
|
if ($previewOnly) {
|
|
return true;
|
|
}
|
|
|
|
$mail->send();
|
|
return true;
|
|
|
|
} catch (Exception $e) {
|
|
error_log('Mailer Error: ' . $mail->ErrorInfo);
|
|
return false;
|
|
} catch (\Throwable $e) {
|
|
error_log('Mailer Exception: ' . $e->getMessage());
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Backwards-compatible wrapper.
|
|
* Default template: 'quary'
|
|
*/
|
|
function sendAccountCreationMail(bool $previewOnly = false, string $templateKey = 'quary'): bool
|
|
{
|
|
return sendMailFromTemplate($templateKey, $previewOnly);
|
|
} |