Files
plane/apps/api/templates/emails/user/email_updated.html
Bavisetti Narayan ce6299937f [WEB-5430] feat: allow users to change email (#8120)
* feat: change user email

* chore: optimised the logic

* feat: add email change functionality and related modals in profile form

* refactor: format checkEmail method for improved readability

* chore: added rate limit exceeded validation

* feat: implement change email modal with localization support

- Added translation support for the change email modal, including titles, descriptions, and error messages.
- Integrated the useTranslation hook for dynamic text rendering.
- Updated form validation messages to utilize localized strings.
- Enhanced user feedback with localized success and error toast messages.
- Updated button labels and placeholders to reflect localization changes.

* chore: added extra validation in cache key

* fix: format files

---------

Co-authored-by: b-saikrishnakanth <bsaikrishnakanth97@gmail.com>
Co-authored-by: sriramveeraghanta <veeraghanta.sriram@gmail.com>
2025-11-24 21:21:52 +05:30

1059 lines
51 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="format-detection" content="telephone=no" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Plane email address successfully updated</title>
<style type="text/css" emogrify="no">
#outlook a {
padding: 0;
}
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
table td {
border-collapse: collapse;
mso-line-height-rule: exactly;
}
.editable.image {
font-size: 0 !important;
line-height: 0 !important;
}
.nl2go_preheader {
display: none !important;
mso-hide: all !important;
mso-line-height-rule: exactly;
visibility: hidden !important;
line-height: 0px !important;
font-size: 0px !important;
}
body {
width: 100% !important;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
margin: 0;
padding: 0;
}
img {
outline: none;
text-decoration: none;
-ms-interpolation-mode: bicubic;
}
a img {
border: none;
}
table {
border-collapse: collapse;
mso-table-lspace: 0pt;
mso-table-rspace: 0pt;
}
th {
font-weight: normal;
text-align: left;
}
*[class="gmail-fix"] {
display: none !important;
}
</style>
<style type="text/css" emogrify="no">
@media (max-width: 600px) {
.gmx-killpill {
content: " \03D1";
}
.r0-o {
border-style: solid !important;
margin: 0 auto 0 auto !important;
width: 320px !important;
}
.r1-i {
background-color: #ffffff !important;
}
.r2-c {
box-sizing: border-box !important;
text-align: center !important;
valign: top !important;
width: 100% !important;
}
.r3-o {
border-style: solid !important;
margin: 0 auto 0 auto !important;
width: 100% !important;
}
.r4-i {
padding-bottom: 20px !important;
padding-left: 15px !important;
padding-right: 15px !important;
padding-top: 20px !important;
}
.r5-c {
box-sizing: border-box !important;
display: block !important;
valign: top !important;
width: 100% !important;
}
.r6-o {
border-style: solid !important;
width: 100% !important;
}
.r7-i {
padding-left: 0px !important;
padding-right: 0px !important;
}
.r8-c {
box-sizing: border-box !important;
text-align: left !important;
valign: top !important;
width: 100% !important;
}
.r9-o {
border-style: solid !important;
margin: 0 auto 0 0 !important;
width: 100% !important;
}
.r10-i {
padding-bottom: 15px !important;
padding-left: 15px !important;
padding-right: 15px !important;
padding-top: 15px !important;
}
.r17-i {
padding-bottom: 5px !important;
padding-left: 15px !important;
padding-right: 15px !important;
padding-top: 5px !important;
}
.r18-c {
box-sizing: border-box !important;
text-align: center !important;
width: 100% !important;
}
.r19-c {
box-sizing: border-box !important;
width: 100% !important;
}
.r20-i {
font-size: 0px !important;
padding-bottom: 10px !important;
padding-left: 65px !important;
padding-right: 65px !important;
padding-top: 10px !important;
}
.r21-c {
box-sizing: border-box !important;
width: 32px !important;
}
.r22-o {
border-style: solid !important;
margin-right: 8px !important;
width: 32px !important;
}
.r23-i {
padding-bottom: 5px !important;
padding-top: 5px !important;
}
.r24-o {
border-style: solid !important;
margin-right: 0px !important;
width: 32px !important;
}
.r25-i {
padding-bottom: 0px !important;
padding-top: 5px !important;
text-align: center !important;
}
body {
-webkit-text-size-adjust: none;
}
.nl2go-responsive-hide {
display: none;
}
.nl2go-body-table {
min-width: unset !important;
}
.mobshow {
height: auto !important;
overflow: visible !important;
max-height: unset !important;
visibility: visible !important;
border: none !important;
}
.resp-table {
display: inline-table !important;
}
.magic-resp {
display: table-cell !important;
}
}
</style>
<style type="text/css">
p,
h1,
h2,
h3,
h4,
ol,
ul {
margin: 0;
}
a,
a:link {
color: #006399;
text-decoration: underline;
}
.nl2go-default-textstyle {
color: #3b3f44;
font-family: georgia, serif;
font-size: 16px;
line-height: 1.5;
word-break: break-word;
}
.default-heading2 {
color: #1f2d3d;
font-family: arial, helvetica, sans-serif;
font-size: 32px;
word-break: break-word;
}
a[x-apple-data-detectors] {
color: inherit !important;
text-decoration: inherit !important;
font-size: inherit !important;
font-family: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
}
.no-show-for-you {
border: none;
display: none;
float: none;
font-size: 0;
height: 0;
line-height: 0;
max-height: 0;
mso-hide: all;
overflow: hidden;
table-layout: fixed;
visibility: hidden;
width: 0;
}
</style>
<!--[if mso]>
<xml>
<o:OfficeDocumentSettings>
<o:AllowPNG />
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
<![endif]-->
<style type="text/css">
a:link {
color: #006399;
text-decoration: underline;
}
</style>
</head>
<body
bgcolor="#ffffff"
text="#3b3f44"
link="#006399"
yahoo="fix"
style="background-color: #ffffff"
>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
class="nl2go-body-table"
width="100%"
style="background-color: #ffffff; width: 100%"
>
<tr>
<td>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="600"
align="center"
class="r0-o"
style="table-layout: fixed; width: 600px"
>
<tr>
<td valign="top" class="r1-i" style="background-color: #ffffff">
<!-- Logo Section -->
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
align="center"
class="r3-o"
style="table-layout: fixed; width: 100%"
>
<tr>
<td
class="r4-i"
style="padding-bottom: 20px; padding-top: 20px"
>
<table
width="100%"
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
>
<tr>
<th
width="100%"
valign="top"
class="r5-c"
style="font-weight: normal"
>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
class="r6-o"
style="table-layout: fixed; width: 100%"
>
<tr>
<td
valign="top"
class="r7-i"
style="
padding-left: 10px;
padding-right: 10px;
"
>
<table
width="100%"
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
>
<tr>
<td class="r8-c" align="left">
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="150"
class="r9-o"
style="
table-layout: fixed;
width: 150px;
"
>
<tr>
<td
style="
font-size: 0px;
line-height: 0px;
"
>
<img
src="https://media.docs.plane.so/logo/new-logo-white.png"
width="150"
border="0"
style="
display: block;
width: 100%;
"
/>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</th>
</tr>
</table>
</td>
</tr>
</table>
<!-- Main Content Section -->
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
align="center"
class="r3-o"
style="table-layout: fixed; width: 100%"
>
<tr>
<td
class="r10-i"
style="padding-bottom: 15px; padding-top: 15px"
>
<table
width="100%"
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
>
<tr>
<th
width="100%"
valign="top"
class="r5-c"
style="font-weight: normal"
>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
class="r6-o"
style="table-layout: fixed; width: 100%"
>
<tr>
<td
valign="top"
class="r7-i"
style="
padding-left: 15px;
padding-right: 15px;
"
>
<table
width="100%"
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
>
<tr>
<td class="r8-c" align="left">
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
class="r9-o"
style="
table-layout: fixed;
width: 100%;
"
>
<tr>
<td
align="left"
valign="top"
class="nl2go-default-textstyle"
style="
color: #3b3f44;
font-family: georgia, serif;
font-size: 16px;
line-height: 1.5;
word-break: break-word;
padding-bottom: 10px;
padding-top: 10px;
text-align: left;
"
>
<div>
<h2
class="default-heading2"
style="
margin: 0;
color: #1f2d3d;
font-family:
arial, helvetica,
sans-serif;
font-size: 32px;
word-break: break-word;
"
>
Plane email address
successfully updated
</h2>
</div>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="r8-c" align="left">
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
class="r9-o"
style="
table-layout: fixed;
width: 100%;
"
>
<tr>
<td
align="left"
valign="top"
class="nl2go-default-textstyle"
style="
color: #3b3f44;
font-family: georgia, serif;
font-size: 16px;
line-height: 1.5;
word-break: break-word;
padding-bottom: 10px;
padding-top: 10px;
text-align: left;
"
>
<div>
<p style="margin: 0">
You have successfully updated
your email address with Plane
to
<strong>{{email}}</strong>.
</p>
<p
style="
margin: 0;
margin-top: 15px;
"
>
You can now log in using this
email address.
</p>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</th>
</tr>
</table>
</td>
</tr>
</table>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
align="center"
class="r3-o"
style="table-layout: fixed; width: 100%"
>
<tr>
<td
class="r17-i"
style="padding-bottom: 5px; padding-top: 5px"
>
<table
width="100%"
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
>
<tr>
<th
width="100%"
valign="top"
class="r5-c"
style="font-weight: normal"
>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
class="r6-o"
style="table-layout: fixed; width: 100%"
>
<tr>
<td
valign="top"
class="r7-i"
style="
padding-left: 15px;
padding-right: 15px;
"
>
<table
width="100%"
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
>
<tr>
<td class="r18-c" align="center">
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="570"
align="center"
class="r3-o"
style="
table-layout: fixed;
width: 570px;
"
>
<tr>
<td valign="top">
<table
width="100%"
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
>
<tr>
<td
class="r19-c"
style="
display: inline-block;
"
>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="570"
class="r6-o"
style="
table-layout: fixed;
width: 570px;
"
>
<tr>
<td
class="r20-i"
style="
padding-bottom: 10px;
padding-left: 209px;
padding-right: 209px;
padding-top: 10px;
"
>
<table
width="100%"
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
>
<tr>
<th
width="40"
class="r21-c mobshow resp-table"
style="
font-weight: normal;
"
>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
class="r22-o"
style="
table-layout: fixed;
width: 100%;
"
>
<tr>
<td
class="r23-i"
style="
font-size: 0px;
line-height: 0px;
padding-bottom: 5px;
padding-top: 5px;
"
>
<a
href="https://github.com/makeplane"
target="_blank"
style="
color: #006399;
text-decoration: underline;
"
>
<img
src="https://creative-assets.mailinblue.com/editor/social-icons/rounded_colored/github_32px.png"
width="32"
border="0"
style="
display: block;
width: 100%;
"
/></a>
</td>
<td
class="nl2go-responsive-hide"
width="8"
style="
font-size: 0px;
line-height: 1px;
"
>
­
</td>
</tr>
</table>
</th>
<th
width="40"
class="r21-c mobshow resp-table"
style="
font-weight: normal;
"
>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
class="r22-o"
style="
table-layout: fixed;
width: 100%;
"
>
<tr>
<td
class="r23-i"
style="
font-size: 0px;
line-height: 0px;
padding-bottom: 5px;
padding-top: 5px;
"
>
<a
href="https://www.linkedin.com/company/planepowers/"
target="_blank"
style="
color: #006399;
text-decoration: underline;
"
>
<img
src="https://creative-assets.mailinblue.com/editor/social-icons/rounded_colored/linkedin_32px.png"
width="32"
border="0"
style="
display: block;
width: 100%;
"
/></a>
</td>
<td
class="nl2go-responsive-hide"
width="8"
style="
font-size: 0px;
line-height: 1px;
"
>
­
</td>
</tr>
</table>
</th>
<th
width="40"
class="r21-c mobshow resp-table"
style="
font-weight: normal;
"
>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
class="r22-o"
style="
table-layout: fixed;
width: 100%;
"
>
<tr>
<td
class="r23-i"
style="
font-size: 0px;
line-height: 0px;
padding-bottom: 5px;
padding-top: 5px;
"
>
<a
href="https://twitter.com/planepowers"
target="_blank"
style="
color: #006399;
text-decoration: underline;
"
>
<img
src="https://creative-assets.mailinblue.com/editor/social-icons/rounded_colored/twitter_32px.png"
width="32"
border="0"
style="
display: block;
width: 100%;
"
/></a>
</td>
<td
class="nl2go-responsive-hide"
width="8"
style="
font-size: 0px;
line-height: 1px;
"
>
­
</td>
</tr>
</table>
</th>
<th
width="32"
class="r21-c mobshow resp-table"
style="
font-weight: normal;
"
>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
class="r24-o"
style="
table-layout: fixed;
width: 100%;
"
>
<tr>
<td
class="r23-i"
style="
font-size: 0px;
line-height: 0px;
padding-bottom: 5px;
padding-top: 5px;
"
>
<a
href="https://plane.so/"
target="_blank"
style="
color: #006399;
text-decoration: underline;
"
>
<img
src="https://creative-assets.mailinblue.com/editor/social-icons/rounded_colored/website_32px.png"
width="32"
border="0"
style="
display: block;
width: 100%;
"
/></a>
</td>
</tr>
</table>
</th>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</th>
</tr>
</table>
</td>
</tr>
</table>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
align="center"
class="r3-o"
style="table-layout: fixed; width: 100%"
>
<tr>
<td
class="r17-i"
style="padding-bottom: 5px; padding-top: 5px"
>
<table
width="100%"
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
>
<tr>
<th
width="100%"
valign="top"
class="r5-c"
style="font-weight: normal"
>
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
class="r6-o"
style="table-layout: fixed; width: 100%"
>
<tr>
<td
valign="top"
class="r7-i"
style="
padding-left: 15px;
padding-right: 15px;
"
>
<table
width="100%"
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
>
<tr>
<td class="r8-c" align="left">
<table
cellspacing="0"
cellpadding="0"
border="0"
role="presentation"
width="100%"
class="r9-o"
style="
table-layout: fixed;
width: 100%;
"
>
<tr>
<td
align="center"
valign="top"
class="r25-i nl2go-default-textstyle"
style="
color: #3b3f44;
font-family: georgia, serif;
word-break: break-word;
font-size: 18px;
line-height: 1.5;
padding-top: 5px;
text-align: center;
"
>
<div>
<p
style="
margin: 0;
font-size: 14px;
"
>
<span style="font-size: 12px"
>This email was sent to
{{email}}. Please delete if
you aren't the intended
recipient.</span
>
</p>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</th>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>