email templates (#328)

This commit is contained in:
NaphalSec 2022-12-30 18:03:11 -05:00 committed by GitHub
parent eea83214cb
commit 05adbace24
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 285 additions and 0 deletions

View File

View File

@ -0,0 +1,25 @@
from django.template import Library, Template
register = Library()
@register.inclusion_tag("emails/_body_content.html", takes_context=True)
def email_body_content(context, content):
template = Template(content)
return {"content": template.render(context)}
@register.inclusion_tag("emails/_button.html", takes_context=True)
def email_button(context, button_text, button_link):
text_template = Template(button_text)
link_template = Template(button_link)
return {
"button_text": text_template.render(context),
"button_link": link_template.render(context),
}
@register.inclusion_tag("emails/_footer.html", takes_context=True)
def email_footer(context, content):
template = Template(content)
return {"content": template.render(context)}

View File

@ -0,0 +1,3 @@
{% autoescape off %}
<p style="font-family: sans-serif; font-size: 14px; font-weight: normal; margin: 0; margin-bottom: 15px;">{{ content }}</p>
{% endautoescape %}

View File

@ -0,0 +1,17 @@
{% autoescape off %}
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="btn btn-primary" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; box-sizing: border-box; width: 100%;" width="100%">
<tbody>
<tr>
<td align="left" style="font-family: sans-serif; font-size: 14px; vertical-align: top; padding-bottom: 15px;" valign="top">
<table role="presentation" border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
<tbody>
<tr>
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top; border-radius: 5px; text-align: center; background-color: #3498db;" valign="top" align="center" bgcolor="#3498db"> <a href="{{ button_link }}" target="_blank" style="border: solid 1px #3498db; border-radius: 5px; box-sizing: border-box; cursor: pointer; display: inline-block; font-size: 14px; font-weight: bold; margin: 0; padding: 12px 25px; text-decoration: none; text-transform: capitalize; background-color: #3498db; border-color: #3498db; color: #ffffff;">{{ button_text }}</a> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
{% endautoescape %}

View File

@ -0,0 +1,7 @@
{% autoescape off %}
<tr>
<td class="content-block" style="font-family: sans-serif; vertical-align: top; padding-bottom: 10px; padding-top: 10px; color: #999999; font-size: 12px; text-align: center;" valign="top" align="center">
{{ content }}
</td>
</tr>
{% endautoescape %}

View File

@ -0,0 +1,27 @@
{% extends "emails/base.html" %}
{% load mail_tags %}
{% autoescape off %}
{% block title %}{{settings.MAIN_DOMAIN}} - New Account Created{% endblock title %}
{% block subtitle %}{{settings.MAIN_DOMAIN}} - New Account Created{% endblock subtitle %}
{% block body_greeting %}
{% email_body_content "Hi there," %}
{% endblock body_greeting %}
{% block body_content %}
{% email_body_content "Your email address was used to create a new account at {{config.site_name}} (https://{{settings.MAIN_DOMAIN}})." %}
{% email_body_content "To confirm your new account, go to this link:" %}
{% endblock body_content %}
{% block body_button %}
{% email_button button_text="Confirm New Account" button_link="https://{{settings.MAIN_DOMAIN}}/auth/reset/{{reset.token}}/" %}
{% endblock body_button %}
{% block body_signature %}
{% email_body_content "Thanks, Admins @{{settings.MAIN_DOMAIN}}" %}
{% endblock body_signature %}
{% block extra_footer %}
{% email_footer "If this was not you, then please ignore this message - your email will not be used to make an account if this link is not visited." %}
{% endblock extra_footer %}
{% endautoescape %}

163
templates/emails/base.html Normal file
View File

@ -0,0 +1,163 @@
{% autoescape off %}
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>{% block title %}{% endblock title %}</title>
<style>
@media only screen and (max-width: 620px) {
table.body h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table.body p,
table.body ul,
table.body ol,
table.body td,
table.body span,
table.body a {
font-size: 16px !important;
}
table.body .wrapper,
table.body .article {
padding: 10px !important;
}
table.body .content {
padding: 0 !important;
}
table.body .container {
padding: 0 !important;
width: 100% !important;
}
table.body .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
table.body .btn table {
width: 100% !important;
}
table.body .btn a {
width: 100% !important;
}
table.body .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
}
@media all {
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
#MessageViewBody a {
color: inherit;
text-decoration: none;
font-size: inherit;
font-family: inherit;
font-weight: inherit;
line-height: inherit;
}
.btn-primary table td:hover {
background-color: #34495e !important;
}
.btn-primary a:hover {
background-color: #34495e !important;
border-color: #34495e !important;
}
}
</style>
</head>
<body style="background-color: #f6f6f6; font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; line-height: 1.4; margin: 0; padding: 0; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;">
<span class="preheader" style="color: transparent; display: none; height: 0; max-height: 0; max-width: 0; opacity: 0; overflow: hidden; mso-hide: all; visibility: hidden; width: 0;">{% block subtitle %}{% endblock subtitle %}</span>
<table role="presentation" border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f6f6f6; width: 100%;" width="100%" bgcolor="#f6f6f6">
<tr>
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top">&nbsp;</td>
<td class="container" style="font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; max-width: 580px; padding: 10px; width: 580px; margin: 0 auto;" width="580" valign="top">
<div class="content" style="box-sizing: border-box; display: block; margin: 0 auto; max-width: 580px; padding: 10px;">
<!-- START CENTERED WHITE CONTAINER -->
<table role="presentation" class="main" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background: #ffffff; border-radius: 3px; width: 100%;" width="100%">
{% block body %}
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper" style="font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 20px;" valign="top">
<table role="presentation" border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;" width="100%">
<tr>
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top">
{% block body_greeting %}
{% endblock body_greeting %}
{% block body_content %}
{% endblock body_content %}
{% block body_button %}
{% endblock body_button %}
{% block body_signature %}
{% endblock body_signature %}
</td>
</tr>
</table>
</td>
</tr>
{% endblock body %}
<!-- END MAIN CONTENT AREA -->
</table>
<!-- END CENTERED WHITE CONTAINER -->
<!-- START FOOTER -->
<div class="footer" style="clear: both; margin-top: 10px; text-align: center; width: 100%;">
<table role="presentation" border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;" width="100%">
{% block extra_footer %}
{% endblock extra_footer %}
{% block footer %}
<tr>
<td class="content-block" style="font-family: sans-serif; vertical-align: top; padding-bottom: 10px; padding-top: 10px; color: #999999; font-size: 12px; text-align: center;" valign="top" align="center">
Visit our Site: <a href="https://{{settings.MAIN_DOMAIN}}" style="text-decoration: underline; color: #999999; font-size: 12px; text-align: center;">https://{{settings.MAIN_DOMAIN}}</a>.
</td>
</tr>
<tr>
<td class="content-block powered-by" style="font-family: sans-serif; vertical-align: top; padding-bottom: 10px; padding-top: 10px; color: #999999; font-size: 12px; text-align: center;" valign="top" align="center">
Powered by <a href="https://jointakahe.org/" style="color: #999999; font-size: 12px; text-align: center; text-decoration: none;">Takahe</a>.
</td>
</tr>
{% endblock footer %}
</table>
</div>
<!-- END FOOTER -->
</div>
</td>
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;" valign="top">&nbsp;</td>
</tr>
</table>
</body>
</html>
{% endautoescape %}

View File

@ -0,0 +1,27 @@
{% extends "emails/base.html" %}
{% load mail_tags %}
{% autoescape off %}
{% block title %}{{settings.MAIN_DOMAIN}} - Password Reset Requested{% endblock title %}
{% block subtitle %}{{settings.MAIN_DOMAIN}} - Password Reset Requested{% endblock subtitle %}
{% block body_greeting %}
{% email_body_content "Hi there," %}
{% endblock body_greeting %}
{% block body_content %}
{% email_body_content "A password reset was requested for your account ({{reset.user.email}}) at {{Config.system.site_name}} (https://{{settings.MAIN_DOMAIN}})." %}
{% email_body_content "To reset your password, go to this link:" %}
{% endblock body_content %}
{% block body_button %}
{% email_button button_text="Reset Password" button_link="https://{{settings.MAIN_DOMAIN}}/auth/reset/{{reset.token}}/" %}
{% endblock body_button %}
{% block body_signature %}
{% email_body_content "Thanks, Admins @{{settings.MAIN_DOMAIN}}" %}
{% endblock body_signature %}
{% block extra_footer %}
{% email_footer "If this was not you, then please ignore this message - your password will not be reset if this link is not visited." %}
{% endblock extra_footer %}
{% endautoescape %}

View File

@ -34,6 +34,14 @@ class PasswordResetStates(StateGraph):
"settings": settings,
},
),
html_message=render_to_string(
"emails/account_new.html",
{
"reset": reset,
"config": Config.system,
"settings": settings,
},
),
from_email=settings.SERVER_EMAIL,
recipient_list=[reset.user.email],
)
@ -48,6 +56,14 @@ class PasswordResetStates(StateGraph):
"settings": settings,
},
),
html_message=render_to_string(
"emails/password_reset.html",
{
"reset": reset,
"config": Config.system,
"settings": settings,
},
),
from_email=settings.SERVER_EMAIL,
recipient_list=[reset.user.email],
)