Complete transactional email layer for Elmeg: - 3 SES templates (verification, password reset, security alert) - TypeScript integration module with AWS SDK v3 - Template deployment script - Usage examples - Comprehensive README with compliance notes
306 lines
11 KiB
Markdown
306 lines
11 KiB
Markdown
# AWS SES Email Templates for Elmeg
|
||
|
||
## Template 1: Email Verification
|
||
|
||
**Template Name:** `ELMEG_EMAIL_VERIFICATION`
|
||
|
||
### Subject
|
||
|
||
```
|
||
Verify your Elmeg account
|
||
```
|
||
|
||
### HTML Body
|
||
|
||
```html
|
||
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Verify your email</title>
|
||
</head>
|
||
<body style="margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: #f5f5f5;">
|
||
<table role="presentation" width="100%" cellspacing="0" cellpadding="0" style="max-width: 600px; margin: 0 auto; background-color: #ffffff;">
|
||
<tr>
|
||
<td style="padding: 40px 30px; text-align: center; background-color: #1a1a2e;">
|
||
<h1 style="margin: 0; color: #ffffff; font-size: 28px; font-weight: 700;">{{app_name}}</h1>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="padding: 40px 30px;">
|
||
<h2 style="margin: 0 0 20px; color: #1a1a2e; font-size: 22px; font-weight: 600;">Verify your email address</h2>
|
||
<p style="margin: 0 0 20px; color: #333333; font-size: 16px; line-height: 1.5;">
|
||
Hi {{user_name}},
|
||
</p>
|
||
<p style="margin: 0 0 20px; color: #333333; font-size: 16px; line-height: 1.5;">
|
||
Thanks for signing up for {{app_name}}. Please verify your email address by clicking the button below.
|
||
</p>
|
||
<table role="presentation" cellspacing="0" cellpadding="0" style="margin: 30px 0;">
|
||
<tr>
|
||
<td style="background-color: #4f46e5; border-radius: 6px;">
|
||
<a href="{{verification_link}}" style="display: inline-block; padding: 14px 32px; color: #ffffff; text-decoration: none; font-size: 16px; font-weight: 600;">Verify Email Address</a>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
<p style="margin: 0 0 20px; color: #666666; font-size: 14px; line-height: 1.5;">
|
||
This link will expire after 24 hours for your security.
|
||
</p>
|
||
<p style="margin: 0 0 20px; color: #666666; font-size: 14px; line-height: 1.5;">
|
||
If you did not create an account, you can safely ignore this email.
|
||
</p>
|
||
<hr style="border: none; border-top: 1px solid #eeeeee; margin: 30px 0;">
|
||
<p style="margin: 0; color: #999999; font-size: 12px; line-height: 1.5;">
|
||
If the button above doesn't work, copy and paste this URL into your browser:
|
||
</p>
|
||
<p style="margin: 10px 0 0; color: #4f46e5; font-size: 12px; word-break: break-all;">
|
||
{{verification_link}}
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="padding: 30px; background-color: #f9fafb; text-align: center;">
|
||
<p style="margin: 0 0 10px; color: #666666; font-size: 14px;">
|
||
{{app_name}} – The Goose Community Archive
|
||
</p>
|
||
<p style="margin: 0; color: #999999; font-size: 12px;">
|
||
Questions? Contact us at {{support_email}}
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</body>
|
||
</html>
|
||
```
|
||
|
||
### Plain Text Body
|
||
|
||
```
|
||
Verify your Elmeg account
|
||
|
||
Hi {{user_name}},
|
||
|
||
Thanks for signing up for {{app_name}}. Please verify your email address by clicking the link below:
|
||
|
||
{{verification_link}}
|
||
|
||
This link will expire after 24 hours for your security.
|
||
|
||
If you did not create an account, you can safely ignore this email.
|
||
|
||
---
|
||
{{app_name}} – The Goose Community Archive
|
||
Questions? Contact us at {{support_email}}
|
||
```
|
||
|
||
---
|
||
|
||
## Template 2: Password Reset
|
||
|
||
**Template Name:** `ELMEG_PASSWORD_RESET`
|
||
|
||
### Subject
|
||
|
||
```
|
||
Reset your Elmeg password
|
||
```
|
||
|
||
### HTML Body
|
||
|
||
```html
|
||
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Reset your password</title>
|
||
</head>
|
||
<body style="margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: #f5f5f5;">
|
||
<table role="presentation" width="100%" cellspacing="0" cellpadding="0" style="max-width: 600px; margin: 0 auto; background-color: #ffffff;">
|
||
<tr>
|
||
<td style="padding: 40px 30px; text-align: center; background-color: #1a1a2e;">
|
||
<h1 style="margin: 0; color: #ffffff; font-size: 28px; font-weight: 700;">{{app_name}}</h1>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="padding: 40px 30px;">
|
||
<h2 style="margin: 0 0 20px; color: #1a1a2e; font-size: 22px; font-weight: 600;">Reset your password</h2>
|
||
<p style="margin: 0 0 20px; color: #333333; font-size: 16px; line-height: 1.5;">
|
||
Hi {{user_name}},
|
||
</p>
|
||
<p style="margin: 0 0 20px; color: #333333; font-size: 16px; line-height: 1.5;">
|
||
We received a request to reset the password for your {{app_name}} account. Click the button below to choose a new password.
|
||
</p>
|
||
<table role="presentation" cellspacing="0" cellpadding="0" style="margin: 30px 0;">
|
||
<tr>
|
||
<td style="background-color: #4f46e5; border-radius: 6px;">
|
||
<a href="{{reset_link}}" style="display: inline-block; padding: 14px 32px; color: #ffffff; text-decoration: none; font-size: 16px; font-weight: 600;">Reset Password</a>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
<p style="margin: 0 0 20px; color: #666666; font-size: 14px; line-height: 1.5;">
|
||
This link will expire after 1 hour for your security.
|
||
</p>
|
||
<p style="margin: 0 0 20px; color: #666666; font-size: 14px; line-height: 1.5;">
|
||
If you did not request a password reset, you can safely ignore this email. Your password will remain unchanged.
|
||
</p>
|
||
<hr style="border: none; border-top: 1px solid #eeeeee; margin: 30px 0;">
|
||
<p style="margin: 0; color: #999999; font-size: 12px; line-height: 1.5;">
|
||
If the button above doesn't work, copy and paste this URL into your browser:
|
||
</p>
|
||
<p style="margin: 10px 0 0; color: #4f46e5; font-size: 12px; word-break: break-all;">
|
||
{{reset_link}}
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="padding: 30px; background-color: #f9fafb; text-align: center;">
|
||
<p style="margin: 0 0 10px; color: #666666; font-size: 14px;">
|
||
{{app_name}} – The Goose Community Archive
|
||
</p>
|
||
<p style="margin: 0; color: #999999; font-size: 12px;">
|
||
Questions? Contact us at {{support_email}}
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</body>
|
||
</html>
|
||
```
|
||
|
||
### Plain Text Body
|
||
|
||
```
|
||
Reset your Elmeg password
|
||
|
||
Hi {{user_name}},
|
||
|
||
We received a request to reset the password for your {{app_name}} account.
|
||
|
||
Click the link below to choose a new password:
|
||
|
||
{{reset_link}}
|
||
|
||
This link will expire after 1 hour for your security.
|
||
|
||
If you did not request a password reset, you can safely ignore this email. Your password will remain unchanged.
|
||
|
||
---
|
||
{{app_name}} – The Goose Community Archive
|
||
Questions? Contact us at {{support_email}}
|
||
```
|
||
|
||
---
|
||
|
||
## Template 3: Security Alert
|
||
|
||
**Template Name:** `ELMEG_SECURITY_ALERT`
|
||
|
||
### Subject
|
||
|
||
```
|
||
Security alert for your Elmeg account
|
||
```
|
||
|
||
### HTML Body
|
||
|
||
```html
|
||
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Security Alert</title>
|
||
</head>
|
||
<body style="margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background-color: #f5f5f5;">
|
||
<table role="presentation" width="100%" cellspacing="0" cellpadding="0" style="max-width: 600px; margin: 0 auto; background-color: #ffffff;">
|
||
<tr>
|
||
<td style="padding: 40px 30px; text-align: center; background-color: #1a1a2e;">
|
||
<h1 style="margin: 0; color: #ffffff; font-size: 28px; font-weight: 700;">{{app_name}}</h1>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="padding: 40px 30px;">
|
||
<table role="presentation" cellspacing="0" cellpadding="0" style="margin-bottom: 20px;">
|
||
<tr>
|
||
<td style="background-color: #fef3c7; border-radius: 6px; padding: 12px 16px;">
|
||
<p style="margin: 0; color: #92400e; font-size: 14px; font-weight: 600;">⚠️ Security Notice</p>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
<h2 style="margin: 0 0 20px; color: #1a1a2e; font-size: 22px; font-weight: 600;">Account activity detected</h2>
|
||
<p style="margin: 0 0 20px; color: #333333; font-size: 16px; line-height: 1.5;">
|
||
Hi {{user_name}},
|
||
</p>
|
||
<p style="margin: 0 0 20px; color: #333333; font-size: 16px; line-height: 1.5;">
|
||
We detected the following activity on your {{app_name}} account:
|
||
</p>
|
||
<table role="presentation" cellspacing="0" cellpadding="0" style="margin: 20px 0; width: 100%;">
|
||
<tr>
|
||
<td style="background-color: #f3f4f6; border-radius: 6px; padding: 16px;">
|
||
<p style="margin: 0; color: #374151; font-size: 15px; line-height: 1.5;">
|
||
{{security_event_description}}
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
<p style="margin: 0 0 20px; color: #333333; font-size: 16px; line-height: 1.5;">
|
||
If this was you, no further action is needed.
|
||
</p>
|
||
<p style="margin: 0 0 20px; color: #333333; font-size: 16px; line-height: 1.5;">
|
||
If you did not perform this action, we recommend you secure your account immediately by changing your password.
|
||
</p>
|
||
<hr style="border: none; border-top: 1px solid #eeeeee; margin: 30px 0;">
|
||
<p style="margin: 0; color: #999999; font-size: 12px; line-height: 1.5;">
|
||
This is an automated security notification. If you have concerns about your account security, please contact us at {{support_email}}.
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="padding: 30px; background-color: #f9fafb; text-align: center;">
|
||
<p style="margin: 0 0 10px; color: #666666; font-size: 14px;">
|
||
{{app_name}} – The Goose Community Archive
|
||
</p>
|
||
<p style="margin: 0; color: #999999; font-size: 12px;">
|
||
Questions? Contact us at {{support_email}}
|
||
</p>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</body>
|
||
</html>
|
||
```
|
||
|
||
### Plain Text Body
|
||
|
||
```
|
||
Security alert for your Elmeg account
|
||
|
||
Hi {{user_name}},
|
||
|
||
We detected the following activity on your {{app_name}} account:
|
||
|
||
{{security_event_description}}
|
||
|
||
If this was you, no further action is needed.
|
||
|
||
If you did not perform this action, we recommend you secure your account immediately by changing your password.
|
||
|
||
---
|
||
This is an automated security notification. If you have concerns about your account security, please contact us at {{support_email}}.
|
||
|
||
{{app_name}} – The Goose Community Archive
|
||
```
|
||
|
||
---
|
||
|
||
## Template Placeholders Reference
|
||
|
||
| Placeholder | Description | Used In |
|
||
|-------------|-------------|---------|
|
||
| `{{app_name}}` | Application name ("Elmeg") | All templates |
|
||
| `{{user_name}}` | User's display name or email | All templates |
|
||
| `{{support_email}}` | Support contact email | All templates |
|
||
| `{{verification_link}}` | Email verification URL | Email Verification |
|
||
| `{{reset_link}}` | Password reset URL | Password Reset |
|
||
| `{{security_event_description}}` | Description of the security event | Security Alert |
|