add FRONTEND_URL and password-reset implementation

This commit is contained in:
philipp committed 2024-12-11 17:53:50 +01:00
1 parent f6da5ede9a
commit b0bd323bee
6 files changed
+624 -31

No files matched your search

+2 -1
View File
@@ -4,4 +4,5 @@ SMTP_USER="project.1"
SMTP_PASS="secret.1"
EMAIL_FROM="noreply@lauf-fuer-kaya.de"
EMAIL_REPLYTO="info@lauf-fuer-kaya.de"
REDIS_URL=redis://localhost:6379
REDIS_URL=redis://localhost:6379
FRONTEND_URL="https://run.lauf-fuer-kaya.de"
+3
View File
@@ -42,6 +42,9 @@ emailRouter.post('/', zValidator('json', sendEmailSchema), async (c) => {
const dataURL = await generateBarcodeDataURL(data.barcode_content);
data.barcode_url = dataURL;
}
if (templateName === "password-reset") {
data.reset_link= `${process.env.FRONTEND_URL}/reset/${(Buffer.from(data.token)).toString("base64")}`
}
await emailService.sendEmail({
to,
subject,
+298 -7
View File
@@ -1,7 +1,298 @@
<h1>Anfrage zum Zurücksetzen des Passworts</h1>
<p>Hallo {{name}},</p>
<p>Wir haben eine Anfrage zum Zurücksetzen Ihres Passworts erhalten. Klicken Sie auf den untenstehenden Link, um ein neues Passwort zu erstellen:</p>
<a href="{{resetLink}}" style="display: inline-block; background: #007bff; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px; margin: 15px 0;">Passwort zurücksetzen</a>
<p>Dieser Link läuft in {{expiresIn}} ab.</p>
<p>Falls Sie diese Anfrage nicht gestellt haben, ignorieren Sie bitte diese E-Mail oder kontaktieren Sie den Support, wenn Sie Bedenken haben.</p>
<p>Mit freundlichen Grüßen,<br>Ihr Support-Team</p>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" lang="en">
<head>
<meta content="width=device-width" name="viewport" />
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta name="x-apple-disable-message-reformatting" />
<meta content="IE=edge" http-equiv="X-UA-Compatible" />
<meta name="x-apple-disable-message-reformatting" />
<meta
content="telephone=no,address=no,email=no,date=no,url=no"
name="format-detection"
/>
<meta content="light" name="color-scheme" />
<meta content="light" name="supported-color-schemes" />
<!--$-->
<style>
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 400;
mso-font-alt: "sans-serif";
src: url(https://rsms.me/inter/font-files/Inter-Regular.woff2?v=3.19)
format("woff2");
}
* {
font-family: "Inter", sans-serif;
}
</style>
<style>
blockquote,
h1,
h2,
h3,
img,
li,
ol,
p,
ul {
margin-top: 0;
margin-bottom: 0;
}
@media only screen and (max-width: 425px) {
.tab-row-full {
width: 100% !important;
}
.tab-col-full {
display: block !important;
width: 100% !important;
}
.tab-pad {
padding: 0 !important;
}
}
</style>
</head>
<body style="margin: 0">
<div
style="
display: none;
overflow: hidden;
line-height: 1px;
opacity: 0;
max-height: 0;
max-width: 0;
"
id="__react-email-preview"
>
Anfrage zum Zurücksetzen des Passworts
<div>
 ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏
</div>
</div>
<table
align="center"
width="100%"
border="0"
cellpadding="0"
cellspacing="0"
role="presentation"
style="
max-width: 600px;
min-width: 300px;
width: 100%;
margin-left: auto;
margin-right: auto;
padding: 0.5rem;
"
>
<tbody>
<tr style="width: 100%">
<td>
<table
align="center"
width="100%"
border="0"
cellpadding="0"
cellspacing="0"
role="presentation"
style="margin-top: 0px; margin-bottom: 32px"
>
<tbody style="width: 100%">
<tr style="width: 100%">
<td align="left" data-id="__react-email-column">
<img
title="Logo"
alt="Logo"
src="data:image/svg+xml,%3Csvg id='Gruppe_194' data-name='Gruppe 194' xmlns='http://www.w3.org/2000/svg' width='217.844' height='387.915' viewBox='0 0 217.844 387.915'%3E%3Cpath id='Pfad_1' data-name='Pfad 1' d='M229.1,167.459c-5.467-2.565-10.96-5-16.54-7.269l9.471,7.344Z' transform='translate(-29.627 36.578)' fill='%23020202'/%3E%3Cpath id='Pfad_2' data-name='Pfad 2' d='M204.37,22.44,208.8,37.666A21.193,21.193,0,0,0,204.37,22.44Z' transform='translate(-35.604 -14.354)' fill='%2308b09e'/%3E%3Cpath id='Pfad_3' data-name='Pfad 3' d='M195.651,213.848c-.651,1.089-1.251,2.177-1.964,3.253s-1.251,2.052-1.927,3.065h25.085c2.327-2.152,4.642-4.341,6.919-6.556Z' transform='translate(-40.757 55.996)' fill='%2342210b'/%3E%3Cpath id='Pfad_4' data-name='Pfad 4' d='M165.623,258.931c1.063-1.9,2.189-3.753,3.34-5.618l5.442-88.492,19.217-65.058,25.235-.45a53.01,53.01,0,0,0,.463-7.019l-26.211.5-13.9-42.225a13.387,13.387,0,0,1-4.366,3.566c-.413.225-.813.438-1.251.626L187.13,98.175l-19.317,64.207-5.755,92.095-3.128,13.074A32.529,32.529,0,0,0,165.623,258.931Z' transform='translate(-48.682 0.468)' fill='%2342210b'/%3E%3Cpath id='Pfad_5' data-name='Pfad 5' d='M212.329,90.2q.163.35.3.713l16.577-.3a17.515,17.515,0,0,0,.9-6.656V83.57l-19.1.363A12.686,12.686,0,0,0,212.329,90.2Z' transform='translate(-30.022 8.656)' fill='%2342210b'/%3E%3Cpath id='Pfad_6' data-name='Pfad 6' d='M210.887,100.425a8.394,8.394,0,0,1,.475-4.929c.263-.938.488-1.877.688-2.8l-20.643.225L183.3,119.3h30.277c1.727-2.127,3.328-4.379,5-6.568s3.14-4.554,4.629-6.894l7.407-13.362-12.3.138A22.52,22.52,0,0,1,210.887,100.425Z' transform='translate(-36.975 12.415)' fill='%2308b09e'/%3E%3Cpath id='Pfad_7' data-name='Pfad 7' d='M180.45,123.862h24.6l.363-.926a7.757,7.757,0,0,1,2.5-3.278,31.117,31.117,0,0,0,4.254-3.828l-28.876.075Z' transform='translate(-42.524 20.435)' fill='%23e82524'/%3E%3Cpath id='Pfad_8' data-name='Pfad 8' d='M177.7,132.163l5.793,5.1,16.877-.576c1.164-3.753,2.4-7.507,3.753-11.172l-24.484.388Z' transform='translate(-43.96 24.102)' fill='%23bdbec0'/%3E%3Cpath id='Pfad_9' data-name='Pfad 9' d='M182.826,138.467l-6.143-5.217-3.253,11.01,6.731,4.992Z' transform='translate(-46.621 27.099)' fill='%23491033'/%3E%3Cpath id='Pfad_10' data-name='Pfad 10' d='M195.21,144.014c.663-2.352,1.326-4.7,2.027-7.044l-10.9.363Z' transform='translate(-41.78 28.104)' fill='%23491033'/%3E%3Cpath id='Pfad_11' data-name='Pfad 11' d='M181.4,150.421l22.095,16.265,4.629-5.455a132.757,132.757,0,0,0-13.362-3.541c-1.251-.263-2.064-.513-1.589-2.2.776-2.79,1.539-5.58,2.315-8.37l-11.46-8.758Z' transform='translate(-42.536 29.51)' fill='%23ffce06'/%3E%3Cpath id='Pfad_12' data-name='Pfad 12' d='M218.948,176.87l28.863-.413a74.811,74.811,0,0,0-8.307-4.779c-2.5-1.251-5.08-2.5-7.619-3.628l-7.069.075-9.471-7.344c-2.828-1.126-5.68-2.2-8.558-3.19l-5.317,6.981Z' transform='translate(-34.998 36.199)' fill='%2308b09e'/%3E%3Cpath id='Pfad_13' data-name='Pfad 13' d='M180.2,79.961l-3.753-13.237L154.422,56.39a17.316,17.316,0,0,0-1.764.963,18.153,18.153,0,0,1-7.507,2.5,12.9,12.9,0,0,0-1.852.225l.225,2.39Z' transform='translate(-56.484 -5.829)' fill='%23491033'/%3E%3Cpath id='Pfad_14' data-name='Pfad 14' d='M169.407,55.139a18.679,18.679,0,0,1-5.2-.1,23.259,23.259,0,0,0-8.282.163L171.7,62.709Z' transform='translate(-52.757 -6.242)' fill='%23e82524'/%3E%3Cpath id='Pfad_15' data-name='Pfad 15' d='M143.96,62.212l-3.366-1.752a103.014,103.014,0,0,0-12.924,4.592l17.853,8.758Z' transform='translate(-63.187 -4.807)' fill='%23bdbec0'/%3E%3Cpath id='Pfad_16' data-name='Pfad 16' d='M126.4,89.028l.5-.813a8.232,8.232,0,0,1,7.369-4l6.781-.1-17.4-7.794-5-7.757h0a12.686,12.686,0,0,0-6.969,5.955l7.657,11.4Z' transform='translate(-68.902 3.418)' fill='%23ffce06'/%3E%3Cpath id='Pfad_17' data-name='Pfad 17' d='M120.014,99.078c1.927-3.04,3.916-6.055,5.855-9.1l-7.307-3.29L111.444,75.87c-1.539,3.653-3.128,7.306-4.654,10.972l6.143,9.208Z' transform='translate(-70.951 6.173)' fill='%23491033'/%3E%3Cpath id='Pfad_18' data-name='Pfad 18' d='M145.16,84.82l3.353-.075L147.262,75.2,126.394,65.29c-2.315,1-4.617,2-6.944,2.965l4.2,6.518Z' transform='translate(-65.947 2.196)' fill='%23491033'/%3E%3Cpath id='Pfad_19' data-name='Pfad 19' d='M152.838,87.039a2.925,2.925,0,0,0,.1.926L174.732,95.2l.851-10.434L144.43,73.89l.425,8.608,2.94-.075C151.123,82.31,152.512,83.7,152.838,87.039Z' transform='translate(-56.336 5.402)' fill='%2308b09e'/%3E%3Cpath id='Pfad_20' data-name='Pfad 20' d='M144.711,73.744l30.215,10.3.576-4L143.66,63.66Z' transform='translate(-56.598 1.61)' fill='%23e82524'/%3E%3Cpath id='Pfad_21' data-name='Pfad 21' d='M157.368,90.71l-5.818-2.39c.413,4.091.851,8.195,1.251,12.286Z' transform='translate(-54.812 10.505)' fill='%23e82524'/%3E%3Cpath id='Pfad_22' data-name='Pfad 22' d='M169.26,117.315l.863-10.347L154.109,100.4l-1.089,2.5c.275,2.5.538,5,.813,7.582Z' transform='translate(-53.772 15.059)' fill='%2308b09e'/%3E%3Cpath id='Pfad_23' data-name='Pfad 23' d='M170.379,93.52l-10.434-3.29-5,10.009L169.8,106.67Z' transform='translaLine truncated
style="
display: block;
outline: none;
border: none;
text-decoration: none;
width: 64px;
height: 64px;
"
/>
</td>
</tr>
</tbody>
</table>
<h2
style="
text-align: left;
color: #111827;
margin-bottom: 12px;
margin-top: 0;
font-size: 30px;
line-height: 36px;
font-weight: 700;
"
>
<strong>Anfrage zum Zurücksetzen des Passworts</strong>
</h2>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
<strong>Hallo 👋</strong>
</p>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
Wir haben eine Anfrage zum Zurücksetzen deines Passworts
erhalten.<br />Verwende den folgenden Link, um ein neues Passwort
zu erstellen:
</p>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
<a
href="{{reset_link}}"
rel="noopener noreferrer nofollow"
style="
color: #111827;
text-decoration: underline;
font-weight: 500;
"
target="_blank"
>{{reset_link}}</a
>
</p>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
Falls du diese Anfrage nicht gestellt hast, ignoriere bitte diese
E-Mail.
</p>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
Sportliche Grüße 🏃‍♂️<br />Dein Team Lauf für Kaya!
</p>
<hr
style="
width: 100%;
border: none;
border-top: 1px solid #eaeaea;
margin-top: 32px;
margin-bottom: 32px;
"
/>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
Lauf für Kaya! <strong>Powered by </strong
><u
><strong
><a
href="https://odit.services?ref=lfkmail"
rel="noopener noreferrer nofollow"
style="
color: #111827;
text-decoration: underline;
font-weight: 500;
"
target="_blank"
>ODIT.Services</a
></strong
></u
>.<br /><u
><strong
><a
href="https://lauf-fuer-kaya.de/impressum/"
rel="noopener noreferrer nofollow"
style="
color: #111827;
text-decoration: underline;
font-weight: 500;
"
target="_blank"
>Impressum</a
></strong
></u
>
-
<u
><strong
><a
href="https://lauf-fuer-kaya.de/datenschutz/"
rel="noopener noreferrer nofollow"
style="
color: #111827;
text-decoration: underline;
font-weight: 500;
"
target="_blank"
>Datenschutzerklärung</a
></strong
></u
>
</p>
</td>
</tr>
</tbody>
</table>
<!--/$-->
</body>
</html>
+12 -8
View File
@@ -1,13 +1,17 @@
Anfrage zum Zurücksetzen des Passworts
Hallo 👋
Hallo {{name}},
Wir haben eine Anfrage zum Zurücksetzen deines Passworts erhalten.
Verwende den folgenden Link, um ein neues Passwort zu erstellen:
{{reset_link}}
Wir haben eine Anfrage zum Zurücksetzen Ihres Passworts erhalten. Verwenden Sie den folgenden Link, um ein neues Passwort zu erstellen:
{{resetLink}}
Falls du diese Anfrage nicht gestellt hast, ignoriere bitte diese E-Mail.
Dieser Link läuft in {{expiresIn}} ab.
Sportliche Grüße 🏃‍♂️
Dein Team Lauf für Kaya!
Falls Sie diese Anfrage nicht gestellt haben, ignorieren Sie bitte diese E-Mail oder kontaktieren Sie den Support, wenn Sie Bedenken haben.
-
Mit freundlichen Grüßen,
Ihr Support-Team
Lauf für Kaya!
Powered by ODIT.Services (https://odit.services)
Impressum: https://lauf-fuer-kaya.de/impressum/
Datenschutzerklärung: https://lauf-fuer-kaya.de/datenschutz/
+297 -7
View File
@@ -1,7 +1,297 @@
<h1>Password Reset Request</h1>
<p>Hello {{name}},</p>
<p>We received a request to reset your password. Click the link below to create a new password:</p>
<a href="{{resetLink}}" style="display: inline-block; background: #007bff; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px; margin: 15px 0;">Reset Password</a>
<p>This link will expire in {{expiresIn}}.</p>
<p>If you didn't request this password reset, please ignore this email or contact support if you have concerns.</p>
<p>Best regards,<br>Your Support Team</p>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" lang="en">
<head>
<meta content="width=device-width" name="viewport" />
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta name="x-apple-disable-message-reformatting" />
<meta content="IE=edge" http-equiv="X-UA-Compatible" />
<meta name="x-apple-disable-message-reformatting" />
<meta
content="telephone=no,address=no,email=no,date=no,url=no"
name="format-detection"
/>
<meta content="light" name="color-scheme" />
<meta content="light" name="supported-color-schemes" />
<!--$-->
<style>
@font-face {
font-family: "Inter";
font-style: normal;
font-weight: 400;
mso-font-alt: "sans-serif";
src: url(https://rsms.me/inter/font-files/Inter-Regular.woff2?v=3.19)
format("woff2");
}
* {
font-family: "Inter", sans-serif;
}
</style>
<style>
blockquote,
h1,
h2,
h3,
img,
li,
ol,
p,
ul {
margin-top: 0;
margin-bottom: 0;
}
@media only screen and (max-width: 425px) {
.tab-row-full {
width: 100% !important;
}
.tab-col-full {
display: block !important;
width: 100% !important;
}
.tab-pad {
padding: 0 !important;
}
}
</style>
</head>
<body style="margin: 0">
<div
style="
display: none;
overflow: hidden;
line-height: 1px;
opacity: 0;
max-height: 0;
max-width: 0;
"
id="__react-email-preview"
>
Password-Reset
<div>
 ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏
</div>
</div>
<table
align="center"
width="100%"
border="0"
cellpadding="0"
cellspacing="0"
role="presentation"
style="
max-width: 600px;
min-width: 300px;
width: 100%;
margin-left: auto;
margin-right: auto;
padding: 0.5rem;
"
>
<tbody>
<tr style="width: 100%">
<td>
<table
align="center"
width="100%"
border="0"
cellpadding="0"
cellspacing="0"
role="presentation"
style="margin-top: 0px; margin-bottom: 32px"
>
<tbody style="width: 100%">
<tr style="width: 100%">
<td align="left" data-id="__react-email-column">
<img
title="Logo"
alt="Logo"
src="data:image/svg+xml,%3Csvg id='Gruppe_194' data-name='Gruppe 194' xmlns='http://www.w3.org/2000/svg' width='217.844' height='387.915' viewBox='0 0 217.844 387.915'%3E%3Cpath id='Pfad_1' data-name='Pfad 1' d='M229.1,167.459c-5.467-2.565-10.96-5-16.54-7.269l9.471,7.344Z' transform='translate(-29.627 36.578)' fill='%23020202'/%3E%3Cpath id='Pfad_2' data-name='Pfad 2' d='M204.37,22.44,208.8,37.666A21.193,21.193,0,0,0,204.37,22.44Z' transform='translate(-35.604 -14.354)' fill='%2308b09e'/%3E%3Cpath id='Pfad_3' data-name='Pfad 3' d='M195.651,213.848c-.651,1.089-1.251,2.177-1.964,3.253s-1.251,2.052-1.927,3.065h25.085c2.327-2.152,4.642-4.341,6.919-6.556Z' transform='translate(-40.757 55.996)' fill='%2342210b'/%3E%3Cpath id='Pfad_4' data-name='Pfad 4' d='M165.623,258.931c1.063-1.9,2.189-3.753,3.34-5.618l5.442-88.492,19.217-65.058,25.235-.45a53.01,53.01,0,0,0,.463-7.019l-26.211.5-13.9-42.225a13.387,13.387,0,0,1-4.366,3.566c-.413.225-.813.438-1.251.626L187.13,98.175l-19.317,64.207-5.755,92.095-3.128,13.074A32.529,32.529,0,0,0,165.623,258.931Z' transform='translate(-48.682 0.468)' fill='%2342210b'/%3E%3Cpath id='Pfad_5' data-name='Pfad 5' d='M212.329,90.2q.163.35.3.713l16.577-.3a17.515,17.515,0,0,0,.9-6.656V83.57l-19.1.363A12.686,12.686,0,0,0,212.329,90.2Z' transform='translate(-30.022 8.656)' fill='%2342210b'/%3E%3Cpath id='Pfad_6' data-name='Pfad 6' d='M210.887,100.425a8.394,8.394,0,0,1,.475-4.929c.263-.938.488-1.877.688-2.8l-20.643.225L183.3,119.3h30.277c1.727-2.127,3.328-4.379,5-6.568s3.14-4.554,4.629-6.894l7.407-13.362-12.3.138A22.52,22.52,0,0,1,210.887,100.425Z' transform='translate(-36.975 12.415)' fill='%2308b09e'/%3E%3Cpath id='Pfad_7' data-name='Pfad 7' d='M180.45,123.862h24.6l.363-.926a7.757,7.757,0,0,1,2.5-3.278,31.117,31.117,0,0,0,4.254-3.828l-28.876.075Z' transform='translate(-42.524 20.435)' fill='%23e82524'/%3E%3Cpath id='Pfad_8' data-name='Pfad 8' d='M177.7,132.163l5.793,5.1,16.877-.576c1.164-3.753,2.4-7.507,3.753-11.172l-24.484.388Z' transform='translate(-43.96 24.102)' fill='%23bdbec0'/%3E%3Cpath id='Pfad_9' data-name='Pfad 9' d='M182.826,138.467l-6.143-5.217-3.253,11.01,6.731,4.992Z' transform='translate(-46.621 27.099)' fill='%23491033'/%3E%3Cpath id='Pfad_10' data-name='Pfad 10' d='M195.21,144.014c.663-2.352,1.326-4.7,2.027-7.044l-10.9.363Z' transform='translate(-41.78 28.104)' fill='%23491033'/%3E%3Cpath id='Pfad_11' data-name='Pfad 11' d='M181.4,150.421l22.095,16.265,4.629-5.455a132.757,132.757,0,0,0-13.362-3.541c-1.251-.263-2.064-.513-1.589-2.2.776-2.79,1.539-5.58,2.315-8.37l-11.46-8.758Z' transform='translate(-42.536 29.51)' fill='%23ffce06'/%3E%3Cpath id='Pfad_12' data-name='Pfad 12' d='M218.948,176.87l28.863-.413a74.811,74.811,0,0,0-8.307-4.779c-2.5-1.251-5.08-2.5-7.619-3.628l-7.069.075-9.471-7.344c-2.828-1.126-5.68-2.2-8.558-3.19l-5.317,6.981Z' transform='translate(-34.998 36.199)' fill='%2308b09e'/%3E%3Cpath id='Pfad_13' data-name='Pfad 13' d='M180.2,79.961l-3.753-13.237L154.422,56.39a17.316,17.316,0,0,0-1.764.963,18.153,18.153,0,0,1-7.507,2.5,12.9,12.9,0,0,0-1.852.225l.225,2.39Z' transform='translate(-56.484 -5.829)' fill='%23491033'/%3E%3Cpath id='Pfad_14' data-name='Pfad 14' d='M169.407,55.139a18.679,18.679,0,0,1-5.2-.1,23.259,23.259,0,0,0-8.282.163L171.7,62.709Z' transform='translate(-52.757 -6.242)' fill='%23e82524'/%3E%3Cpath id='Pfad_15' data-name='Pfad 15' d='M143.96,62.212l-3.366-1.752a103.014,103.014,0,0,0-12.924,4.592l17.853,8.758Z' transform='translate(-63.187 -4.807)' fill='%23bdbec0'/%3E%3Cpath id='Pfad_16' data-name='Pfad 16' d='M126.4,89.028l.5-.813a8.232,8.232,0,0,1,7.369-4l6.781-.1-17.4-7.794-5-7.757h0a12.686,12.686,0,0,0-6.969,5.955l7.657,11.4Z' transform='translate(-68.902 3.418)' fill='%23ffce06'/%3E%3Cpath id='Pfad_17' data-name='Pfad 17' d='M120.014,99.078c1.927-3.04,3.916-6.055,5.855-9.1l-7.307-3.29L111.444,75.87c-1.539,3.653-3.128,7.306-4.654,10.972l6.143,9.208Z' transform='translate(-70.951 6.173)' fill='%23491033'/%3E%3Cpath id='Pfad_18' data-name='Pfad 18' d='M145.16,84.82l3.353-.075L147.262,75.2,126.394,65.29c-2.315,1-4.617,2-6.944,2.965l4.2,6.518Z' transform='translate(-65.947 2.196)' fill='%23491033'/%3E%3Cpath id='Pfad_19' data-name='Pfad 19' d='M152.838,87.039a2.925,2.925,0,0,0,.1.926L174.732,95.2l.851-10.434L144.43,73.89l.425,8.608,2.94-.075C151.123,82.31,152.512,83.7,152.838,87.039Z' transform='translate(-56.336 5.402)' fill='%2308b09e'/%3E%3Cpath id='Pfad_20' data-name='Pfad 20' d='M144.711,73.744l30.215,10.3.576-4L143.66,63.66Z' transform='translate(-56.598 1.61)' fill='%23e82524'/%3E%3Cpath id='Pfad_21' data-name='Pfad 21' d='M157.368,90.71l-5.818-2.39c.413,4.091.851,8.195,1.251,12.286Z' transform='translate(-54.812 10.505)' fill='%23e82524'/%3E%3Cpath id='Pfad_22' data-name='Pfad 22' d='M169.26,117.315l.863-10.347L154.109,100.4l-1.089,2.5c.275,2.5.538,5,.813,7.582Z' transform='translate(-53.772 15.059)' fill='%2308b09e'/%3E%3Cpath id='Pfad_23' data-name='Pfad 23' d='M170.379,93.52l-10.434-3.29-5,10.009L169.8,106.67Z' transform='translaLine truncated
style="
display: block;
outline: none;
border: none;
text-decoration: none;
width: 64px;
height: 64px;
"
/>
</td>
</tr>
</tbody>
</table>
<h2
style="
text-align: left;
color: #111827;
margin-bottom: 12px;
margin-top: 0;
font-size: 30px;
line-height: 36px;
font-weight: 700;
"
>
<strong>Password-Reset</strong>
</h2>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
<strong>Hi 👋</strong>
</p>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
We received a request to reset your password.<br />Use the
following link to create a new password:
</p>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
<a
href="{{reset_link}}"
rel="noopener noreferrer nofollow"
style="
color: #111827;
text-decoration: underline;
font-weight: 500;
"
target="_blank"
>{{reset_link}}</a
>
</p>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
If you didn't request this password reset, please ignore this
email.
</p>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
Sporty Greetings 🏃‍♂️<br />Your Team Lauf für Kaya!
</p>
<hr
style="
width: 100%;
border: none;
border-top: 1px solid #eaeaea;
margin-top: 32px;
margin-bottom: 32px;
"
/>
<p
style="
font-size: 15px;
line-height: 24px;
margin: 16px 0;
text-align: left;
margin-bottom: 20px;
margin-top: 0px;
color: #374151;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
"
>
Lauf für Kaya! <strong>Powered by </strong
><u
><strong
><a
href="https://odit.services?ref=lfkmail"
rel="noopener noreferrer nofollow"
style="
color: #111827;
text-decoration: underline;
font-weight: 500;
"
target="_blank"
>ODIT.Services</a
></strong
></u
>.<br /><u
><strong
><a
href="https://lauf-fuer-kaya.de/impressum/"
rel="noopener noreferrer nofollow"
style="
color: #111827;
text-decoration: underline;
font-weight: 500;
"
target="_blank"
>Imprint</a
></strong
></u
>
-
<u
><strong
><a
href="https://lauf-fuer-kaya.de/datenschutz/"
rel="noopener noreferrer nofollow"
style="
color: #111827;
text-decoration: underline;
font-weight: 500;
"
target="_blank"
>Privacy Policy</a
></strong
></u
>
</p>
</td>
</tr>
</tbody>
</table>
<!--/$-->
</body>
</html>
+12 -8
View File
@@ -1,13 +1,17 @@
Password Reset Request
Hello 👋
Hello {{name}},
We received a request to reset your password.
Use the following link to create a new password:
{{reset_link}}
We received a request to reset your password. Use the following link to create a new password:
{{resetLink}}
If you didn't request this password reset, please ignore this email.
This link will expire in {{expiresIn}}.
Sporty Greetings 🏃‍♂️
Your Team Lauf für Kaya!
If you didn't request this password reset, please ignore this email or contact support if you have concerns.
-
Best regards,
Your Support Team
Lauf für Kaya!
Powered by ODIT.Services (https://odit.services)
Imprint: https://lauf-fuer-kaya.de/impressum/
Privacy Policy: https://lauf-fuer-kaya.de/datenschutz/