feat: Add new email templates for password reset, email verification, test, certificate notifications, and inquiry replies, along with a new application logo.

This commit is contained in:
dyzulk
2025-12-31 10:19:43 +07:00
parent 42fa9b75ff
commit 37948c4682
7 changed files with 298 additions and 105 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@@ -1,26 +1,102 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Certificate Expired Alert</title> <title>Certificate Expired Alert</title>
<style>
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.5;
color: #374151;
margin: 0;
padding: 0;
background-color: #f9fafb;
}
.container {
max-width: 600px;
margin: 40px auto;
background-color: #ffffff;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
.header {
padding: 30px 40px;
background-color: #fef2f2;
text-align: center;
}
.header img {
height: 32px;
margin-bottom: 15px;
}
.content {
padding: 40px;
}
.title {
font-size: 24px;
font-weight: 700;
color: #991b1b;
margin-bottom: 20px;
}
.details {
background-color: #fef2f2;
padding: 20px;
border-radius: 8px;
margin: 25px 0;
border: 1px solid #fee2e2;
}
.details p {
margin: 5px 0;
font-size: 14px;
}
.footer {
padding: 30px 40px;
background-color: #f9fafb;
text-align: center;
font-size: 12px;
color: #6b7280;
border-top: 1px solid #e5e7eb;
}
.button {
display: inline-block;
padding: 12px 24px;
background-color: #dc2626;
color: #ffffff;
text-decoration: none;
border-radius: 6px;
font-weight: 600;
margin-top: 10px;
}
</style>
</head> </head>
<body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;"> <body>
<div style="max-width: 600px; margin: 0 auto; padding: 20px;"> <div class="container">
<h2 style="color: #a94442;">URGENT: Certificate Has Expired</h2> <div class="header">
<img src="{{ url('/images/logo/logo-outlined.png') }}" alt="TrustLab Logo">
<p>Hello {{ $certificate->user->first_name ?? 'User' }},</p> </div>
<div class="content">
<p>This is a critical notification that your SSL certificate has <strong>ALREADY EXPIRED</strong>.</p> <h1 class="title">URGENT: Certificate Has Expired</h1>
<div style="background-color: #fee; padding: 15px; border-radius: 5px; margin: 20px 0; border: 1px solid #ebccd1;"> <p>Hello {{ $certificate->user->first_name ?? 'User' }},</p>
<p><strong>Common Name:</strong> {{ $certificate->common_name }}</p>
<p><strong>Organization:</strong> {{ $certificate->organization }}</p> <p>This is a critical notification that your SSL certificate has <strong>ALREADY EXPIRED</strong>.</p>
<p><strong>Key Strength:</strong> {{ $certificate->key_bits }}-bit</p>
<p><strong>Expired On:</strong> {{ $certificate->valid_to->format('d M Y H:i:s') }}</p> <div class="details">
<p><strong>Common Name:</strong> {{ $certificate->common_name }}</p>
<p><strong>Organization:</strong> {{ $certificate->organization }}</p>
<p><strong>Key Strength:</strong> {{ $certificate->key_bits }}-bit</p>
<p><strong>Expired On:</strong> {{ $certificate->valid_to->format('d M Y H:i:s') }}</p>
</div>
<p>Your services using this certificate may be inaccessible or showing security warnings. Please renew immediately.</p>
<a href="{{ config('app.frontend_url', 'http://localhost:3000') }}/dashboard" class="button">Renew Now</a>
</div>
<div class="footer">
<p>&copy; {{ date('Y') }} TrustLab. All rights reserved.</p>
<p>This is an automated system message. Please do not reply to this email.</p>
</div> </div>
<p>Your services using this certificate may be inaccessible or showing security warnings. Please renew immediately.</p>
<a href="{{ config('app.frontend_url', 'http://localhost:3000') }}/dashboard" style="display: inline-block; padding: 10px 20px; background-color: #d9534f; color: white; text-decoration: none; border-radius: 5px;">Renew Now</a>
</div> </div>
</body> </body>
</html> </html>

View File

@@ -1,31 +1,113 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Certificate Expiration Alert</title> <title>Certificate Expiration Alert</title>
<style>
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.5;
color: #374151;
margin: 0;
padding: 0;
background-color: #f9fafb;
}
.container {
max-width: 600px;
margin: 40px auto;
background-color: #ffffff;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
.header {
padding: 30px 40px;
background-color: #fffbeb;
text-align: center;
}
.header img {
height: 32px;
margin-bottom: 15px;
}
.content {
padding: 40px;
}
.title {
font-size: 24px;
font-weight: 700;
color: #92400e;
margin-bottom: 20px;
}
.details {
background-color: #f9f9f9;
padding: 20px;
border-radius: 8px;
margin: 25px 0;
border: 1px solid #e5e7eb;
}
.details p {
margin: 5px 0;
font-size: 14px;
}
.footer {
padding: 30px 40px;
background-color: #f9fafb;
text-align: center;
font-size: 12px;
color: #6b7280;
border-top: 1px solid #e5e7eb;
}
.button {
display: inline-block;
padding: 12px 24px;
background-color: #3b82f6;
color: #ffffff;
text-decoration: none;
border-radius: 6px;
font-weight: 600;
margin-top: 10px;
}
.note {
margin-top: 30px;
font-size: 12px;
color: #777;
font-style: italic;
}
</style>
</head> </head>
<body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;"> <body>
<div style="max-width: 600px; margin: 0 auto; padding: 20px;"> <div class="container">
<h2 style="color: #d9534f;">Action Required: Certificate Expiring Soon</h2> <div class="header">
<img src="{{ url('/images/logo/logo-outlined.png') }}" alt="TrustLab Logo">
<p>Hello {{ $certificate->user->first_name ?? 'User' }},</p> </div>
<div class="content">
<p>This is a notification that one of your SSL certificates is expiring in <strong>{{ $daysRemaining }} days</strong>.</p> <h1 class="title">Action Required: Certificate Expiring Soon</h1>
<div style="background-color: #f9f9f9; padding: 15px; border-radius: 5px; margin: 20px 0;"> <p>Hello {{ $certificate->user->first_name ?? 'User' }},</p>
<p><strong>Common Name:</strong> {{ $certificate->common_name }}</p>
<p><strong>Organization:</strong> {{ $certificate->organization }}</p> <p>This is a notification that one of your SSL certificates is expiring in <strong>{{ $daysRemaining }} days</strong>.</p>
<p><strong>Key Strength:</strong> {{ $certificate->key_bits }}-bit</p>
<p><strong>Expiration Date:</strong> {{ $certificate->valid_to->format('d M Y H:i:s') }}</p> <div class="details">
<p><strong>Common Name:</strong> {{ $certificate->common_name }}</p>
<p><strong>Organization:</strong> {{ $certificate->organization }}</p>
<p><strong>Key Strength:</strong> {{ $certificate->key_bits }}-bit</p>
<p><strong>Expiration Date:</strong> {{ $certificate->valid_to->format('d M Y H:i:s') }}</p>
</div>
<p>Please log in to your dashboard to renew this certificate before it expires to ensure uninterrupted service.</p>
<a href="{{ config('app.frontend_url', 'http://localhost:3000') }}/dashboard" class="button">Go to Dashboard</a>
<p class="note">
If you have already renewed this certificate, please ignore this message.<br>
You are receiving this email because you have enabled certificate renewal alerts in your account settings.
</p>
</div>
<div class="footer">
<p>&copy; {{ date('Y') }} TrustLab. All rights reserved.</p>
<p>This is an automated system message. Please do not reply to this email.</p>
</div> </div>
<p>Please log in to your dashboard to renew this certificate before it expires to ensure uninterrupted service.</p>
<a href="{{ config('app.frontend_url', 'http://localhost:3000') }}/dashboard" style="display: inline-block; padding: 10px 20px; background-color: #007bff; color: white; text-decoration: none; border-radius: 5px;">Go to Dashboard</a>
<p style="margin-top: 30px; font-size: 12px; color: #777;">
If you have already renewed this certificate, please ignore this message.<br>
You are receiving this email because you have enabled certificate renewal alerts in your account settings.
</p>
</div> </div>
</body> </body>
</html> </html>

View File

@@ -2,10 +2,12 @@
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TrustLab Support Inquiry Reply</title>
<style> <style>
body { body {
font-family: 'Inter', system-ui, -apple-system, sans-serif; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6; line-height: 1.5;
color: #374151; color: #374151;
margin: 0; margin: 0;
padding: 0; padding: 0;
@@ -14,21 +16,24 @@
.container { .container {
max-width: 600px; max-width: 600px;
margin: 40px auto; margin: 40px auto;
background: #ffffff; background-color: #ffffff;
border-radius: 16px; border-radius: 12px;
overflow: hidden; overflow: hidden;
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1); box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
border: 1px solid #e5e7eb;
} }
.header { .header {
padding: 30px 40px;
background-color: #111827; background-color: #111827;
padding: 32px;
text-align: center; text-align: center;
} }
.header img {
height: 32px;
margin-bottom: 5px;
}
.header h1 { .header h1 {
color: #ffffff; color: #ffffff;
margin: 0; margin: 10px 0 0 0;
font-size: 24px; font-size: 20px;
font-weight: 700; font-weight: 700;
} }
.content { .content {
@@ -38,15 +43,18 @@
background-color: #f3f4f6; background-color: #f3f4f6;
border-radius: 12px; border-radius: 12px;
padding: 24px; padding: 24px;
margin-bottom: 32px; margin: 25px 0;
border-left: 4px solid #3b82f6; border-left: 4px solid #3b82f6;
font-size: 15px;
color: #1f2937;
} }
.footer { .footer {
padding: 32px; padding: 30px 40px;
background-color: #f9fafb;
text-align: center; text-align: center;
font-size: 14px; font-size: 12px;
color: #6b7280; color: #6b7280;
border-top: 1px solid #f3f4f6; border-top: 1px solid #e5e7eb;
} }
.original-message { .original-message {
margin-top: 40px; margin-top: 40px;
@@ -60,16 +68,19 @@
<body> <body>
<div class="container"> <div class="container">
<div class="header"> <div class="header">
<h1>TrustLab Support</h1> <img src="{{ url('/images/logo/logo-outlined.png') }}" alt="TrustLab Logo">
<h1>Support Reply</h1>
</div> </div>
<div class="content"> <div class="content">
<p>Hello {{ $inquiry->name }},</p> <p>Hello {{ $inquiry->name }},</p>
<p>Thank you for contacting TrustLab. Our team has reviewed your inquiry and has the following response:</p>
<div class="reply-box"> <div class="reply-box">
{!! nl2br(e($replyMessage)) !!} {!! nl2br(e($replyMessage)) !!}
</div> </div>
<p>Best regards,<br>The TrustLab Team</p> <p>Best regards,<br><strong>The TrustLab Team</strong></p>
<div class="original-message"> <div class="original-message">
<p><strong>Original Message:</strong></p> <p><strong>Original Message:</strong></p>
@@ -77,7 +88,8 @@
</div> </div>
</div> </div>
<div class="footer"> <div class="footer">
&copy; {{ date('Y') }} TrustLab. All rights reserved. <p>&copy; {{ date('Y') }} TrustLab. All rights reserved.</p>
<p>This is an automated system message. Please do not reply to this email.</p>
</div> </div>
</div> </div>
</body> </body>

View File

@@ -2,10 +2,12 @@
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Reset Your Password</title>
<style> <style>
body { body {
font-family: 'Inter', system-ui, -apple-system, sans-serif; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6; line-height: 1.5;
color: #374151; color: #374151;
margin: 0; margin: 0;
padding: 0; padding: 0;
@@ -14,65 +16,71 @@
.container { .container {
max-width: 600px; max-width: 600px;
margin: 40px auto; margin: 40px auto;
background: #ffffff; background-color: #ffffff;
border-radius: 16px; border-radius: 12px;
overflow: hidden; overflow: hidden;
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1); box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
border: 1px solid #e5e7eb;
} }
.header { .header {
background-color: #111827; padding: 30px 40px;
padding: 32px; background-color: #eff6ff;
text-align: center; text-align: center;
} }
.header h1 { .header img {
color: #ffffff; height: 32px;
margin: 0; margin-bottom: 15px;
font-size: 24px;
font-weight: 700;
} }
.content { .content {
padding: 40px; padding: 40px;
text-align: center; text-align: center;
} }
.content p { .title {
margin-bottom: 24px; font-size: 24px;
font-weight: 700;
color: #111827;
margin-bottom: 20px;
} }
.btn { .footer {
padding: 30px 40px;
background-color: #f9fafb;
text-align: center;
font-size: 12px;
color: #6b7280;
border-top: 1px solid #e5e7eb;
}
.button {
display: inline-block; display: inline-block;
padding: 12px 32px; padding: 12px 32px;
background-color: #465fff; background-color: #3b82f6;
color: #ffffff !important; color: #ffffff !important;
text-decoration: none; text-decoration: none;
border-radius: 8px; border-radius: 8px;
font-weight: 600; font-weight: 600;
margin-bottom: 32px; margin: 25px 0;
}
.footer {
padding: 32px;
text-align: center;
font-size: 14px;
color: #6b7280;
border-top: 1px solid #f3f4f6;
} }
.sub-link { .sub-link {
font-size: 12px; font-size: 12px;
color: #9ca3af; color: #9ca3af;
word-break: break-all; word-break: break-all;
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #f3f4f6;
} }
</style> </style>
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="header"> <div class="header">
<h1>Reset Your Password</h1> <img src="{{ url('/images/logo/logo-outlined.png') }}" alt="TrustLab Logo">
</div> </div>
<div class="content"> <div class="content">
<h1 class="title">Reset Your Password</h1>
<p>Hello {{ $name }},</p> <p>Hello {{ $name }},</p>
<p>You are receiving this email because we received a password reset request for your TrustLab account.</p> <p>You are receiving this email because we received a password reset request for your TrustLab account.</p>
<a href="{{ $url }}" class="btn">Reset Password</a> <a href="{{ $url }}" class="button">Reset Password</a>
<p>This password reset link will expire in 60 minutes.</p> <p>This password reset link will expire in 60 minutes.</p>
<p>If you did not request a password reset, no further action is required.</p> <p>If you did not request a password reset, no further action is required.</p>
@@ -83,7 +91,8 @@
</div> </div>
</div> </div>
<div class="footer"> <div class="footer">
&copy; {{ date('Y') }} TrustLab. All rights reserved. <p>&copy; {{ date('Y') }} TrustLab. All rights reserved.</p>
<p>This is an automated system message. Please do not reply to this email.</p>
</div> </div>
</div> </div>
</body> </body>

View File

@@ -83,7 +83,7 @@
<div class="container"> <div class="container">
<div class="header"> <div class="header">
<!-- Using CID for embedding logo or absolute URL if accessible --> <!-- Using CID for embedding logo or absolute URL if accessible -->
<img src="{{ url('/images/logo/logo.png') }}" alt="TrustLab Logo"> <img src="{{ url('/images/logo/logo-outlined.png') }}" alt="TrustLab Logo">
</div> </div>
<div class="content"> <div class="content">
<h1 class="title">SMTP Connection Test</h1> <h1 class="title">SMTP Connection Test</h1>

View File

@@ -2,10 +2,12 @@
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TrustLab Email Verification</title>
<style> <style>
body { body {
font-family: 'Inter', system-ui, -apple-system, sans-serif; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
line-height: 1.6; line-height: 1.5;
color: #374151; color: #374151;
margin: 0; margin: 0;
padding: 0; padding: 0;
@@ -14,17 +16,20 @@
.container { .container {
max-width: 600px; max-width: 600px;
margin: 40px auto; margin: 40px auto;
background: #ffffff; background-color: #ffffff;
border-radius: 16px; border-radius: 12px;
overflow: hidden; overflow: hidden;
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1); box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
border: 1px solid #e5e7eb;
} }
.header { .header {
padding: 30px 40px;
background-color: #111827; background-color: #111827;
padding: 32px;
text-align: center; text-align: center;
} }
.header img {
height: 32px;
margin-bottom: 15px;
}
.header h1 { .header h1 {
color: #ffffff; color: #ffffff;
margin: 0; margin: 0;
@@ -35,10 +40,21 @@
padding: 40px; padding: 40px;
text-align: center; text-align: center;
} }
.content p { .title {
margin-bottom: 24px; font-size: 24px;
font-weight: 700;
color: #111827;
margin-bottom: 20px;
} }
.btn { .footer {
padding: 30px 40px;
background-color: #f9fafb;
text-align: center;
font-size: 12px;
color: #6b7280;
border-top: 1px solid #e5e7eb;
}
.button {
display: inline-block; display: inline-block;
padding: 12px 32px; padding: 12px 32px;
background-color: #465fff; background-color: #465fff;
@@ -46,33 +62,30 @@
text-decoration: none; text-decoration: none;
border-radius: 8px; border-radius: 8px;
font-weight: 600; font-weight: 600;
margin-bottom: 32px; margin: 25px 0;
}
.footer {
padding: 32px;
text-align: center;
font-size: 14px;
color: #6b7280;
border-top: 1px solid #f3f4f6;
} }
.sub-link { .sub-link {
font-size: 12px; font-size: 12px;
color: #9ca3af; color: #9ca3af;
word-break: break-all; word-break: break-all;
margin-top: 30px;
padding-top: 20px;
border-top: 1px solid #f3f4f6;
} }
</style> </style>
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="header"> <div class="header">
<h1>TrustLab Verification</h1> <img src="{{ url('/images/logo/logo-outlined.png') }}" alt="TrustLab Logo">
<h1>Email Verification</h1>
</div> </div>
<div class="content"> <div class="content">
<p>Hello {{ $name }},</p> <p>Hello {{ $name }},</p>
<p>Thank you for joining TrustLab! Before you can start managing your certificates and API keys, we need you to verify your email address.</p> <p>Thank you for joining TrustLab! Before you can start managing your certificates and API keys, we need you to verify your email address.</p>
<a href="{{ $url }}" class="btn">Verify Email Address</a> <a href="{{ $url }}" class="button">Verify Email Address</a>
<p>If you did not create an account, no further action is required.</p> <p>If you did not create an account, no further action is required.</p>
@@ -82,7 +95,8 @@
</div> </div>
</div> </div>
<div class="footer"> <div class="footer">
&copy; {{ date('Y') }} TrustLab. All rights reserved. <p>&copy; {{ date('Y') }} TrustLab. All rights reserved.</p>
<p>This is an automated system message. Please do not reply to this email.</p>
</div> </div>
</div> </div>
</body> </body>