.
*
* Thông tin công ty hardcode ở footer vì EmailTemplateRenderer chỉ thay placeholder dạng
* {{key}} đã khai báo trong metadata.variables — mọi scenario đều phải khai lại nếu muốn
* footer động, không đáng.
*/
class EmailTemplateShell
{
/** Bọc phần nội dung vào khung chuẩn. */
public static function wrap(string $bodyHtml): string
{
return self::header() . $bodyHtml . self::footer();
}
/**
* Mở khối NoiDungKM với style chữ chuẩn, để scenario chỉ viết nội dung bên trong.
*/
public static function body(string $innerHtml): string
{
return '
| '
. $innerHtml
. ' |
';
}
/** Khối "Lưu ý: email tự động" dùng ở cuối hầu hết scenario. */
public static function autoNotice(): string
{
return <<<'HTML'
| Lưu ý: Đây là email được gửi tự động. Vui lòng không trả lời email này. |
HTML;
}
public static function header(): string
{
return <<<'HTML'
HTML;
}
public static function footer(): string
{
return <<<'HTML'
|
HTML;
}
/**
* Bọc một đoạn HTML thành email hoàn chỉnh (doctype + head). Thay cho blade
* emails.customer.template-envelope — để không còn mail nào đi qua Blade.
*/
public static function document(?string $title, string $bodyHtml): string
{
$safeTitle = htmlspecialchars((string) $title, ENT_QUOTES, 'UTF-8');
return <<
{$safeTitle}
{$bodyHtml}
HTML;
}
}