Compare commits
No commits in common. "f9e75d06b8ee8ff79f60fb384cb2c35ccf19811d" and "09b24aa6094a980debf4428a1c32583cdb7b606f" have entirely different histories.
f9e75d06b8
...
09b24aa609
@ -1,26 +0,0 @@
|
|||||||
import { Authorized, JsonController, Post } from 'routing-controllers';
|
|
||||||
import { OpenAPI, ResponseSchema } from 'routing-controllers-openapi';
|
|
||||||
import { config } from '../config';
|
|
||||||
import { Mailer } from '../mailer';
|
|
||||||
import { ResponseEmpty } from '../models/responses/ResponseEmpty';
|
|
||||||
|
|
||||||
|
|
||||||
@JsonController('/mails')
|
|
||||||
@OpenAPI({ security: [{ "AuthToken": [] }, { "RefreshTokenCookie": [] }] })
|
|
||||||
export class MailController {
|
|
||||||
|
|
||||||
private mailer: Mailer;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.mailer = new Mailer();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Post('/test')
|
|
||||||
@Authorized(["MAIL:CREATE"])
|
|
||||||
@ResponseSchema(ResponseEmpty, { statusCode: 200 })
|
|
||||||
@OpenAPI({ description: 'Sends a test email to the configured from-address.' })
|
|
||||||
async get() {
|
|
||||||
await this.mailer.sendTestMail(config.mail_from);
|
|
||||||
return new ResponseEmpty();
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,18 +4,12 @@ import { MailOptions } from 'nodemailer/lib/json-transport';
|
|||||||
import Mail from 'nodemailer/lib/mailer';
|
import Mail from 'nodemailer/lib/mailer';
|
||||||
import { config } from './config';
|
import { config } from './config';
|
||||||
import { MailServerConfigError } from './errors/MailErrors';
|
import { MailServerConfigError } from './errors/MailErrors';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is responsible for all things mail sending.
|
* This class is responsible for all things mail sending.
|
||||||
* This uses the mail emplates from src/static/mail_templates
|
|
||||||
*/
|
*/
|
||||||
export class Mailer {
|
export class Mailer {
|
||||||
private transport: Mail;
|
private transport: Mail;
|
||||||
|
|
||||||
/**
|
|
||||||
* The class's default constructor.
|
|
||||||
* Creates the transporter and tests the connection.
|
|
||||||
*/
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.transport = nodemailer.createTransport({
|
this.transport = nodemailer.createTransport({
|
||||||
host: config.mail_server,
|
host: config.mail_server,
|
||||||
@ -33,11 +27,6 @@ export class Mailer {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Function for sending a test mail from the test mail template.
|
|
||||||
* @param to_address The address the mail will be sent to. Should always get pulled from a user object.
|
|
||||||
* @param token The requested password reset token - will be combined with the app_url to generate a password reset link.
|
|
||||||
*/
|
|
||||||
public async sendResetMail(to_address: string, token: String) {
|
public async sendResetMail(to_address: string, token: String) {
|
||||||
const reset_link = `${config.app_url}/reset/${token}`
|
const reset_link = `${config.app_url}/reset/${token}`
|
||||||
const body_html = fs.readFileSync(__dirname + '/static/mail_templates/pw-reset.html', { encoding: 'utf8' }).replace("{{reset_link}}", reset_link).replace("{{recipient_mail}}", to_address).replace("{{copyright_owner}}", "LfK!").replace("{{link_imprint}}", `${config.app_url}/imprint`).replace("{{link_privacy}}", `${config.app_url}/privacy`);
|
const body_html = fs.readFileSync(__dirname + '/static/mail_templates/pw-reset.html', { encoding: 'utf8' }).replace("{{reset_link}}", reset_link).replace("{{recipient_mail}}", to_address).replace("{{copyright_owner}}", "LfK!").replace("{{link_imprint}}", `${config.app_url}/imprint`).replace("{{link_privacy}}", `${config.app_url}/privacy`);
|
||||||
@ -52,26 +41,6 @@ export class Mailer {
|
|||||||
await this.sendMail(mail);
|
await this.sendMail(mail);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Function for sending a test mail from the test mail template.
|
|
||||||
* @param to_address The address the test mail will be sent to - this is the configured from-address by default.
|
|
||||||
*/
|
|
||||||
public async sendTestMail(to_address: string = config.mail_from) {
|
|
||||||
const body_html = fs.readFileSync(__dirname + '/static/mail_templates/test.html', { encoding: 'utf8' }).replace("{{recipient_mail}}", to_address).replace("{{copyright_owner}}", "LfK!").replace("{{link_imprint}}", `${config.app_url}/imprint`).replace("{{link_privacy}}", `${config.app_url}/privacy`);
|
|
||||||
const body_txt = fs.readFileSync(__dirname + '/static/mail_templates/test.txt', { encoding: 'utf8' }).replace("{{recipient_mail}}", to_address).replace("{{copyright_owner}}", "LfK!").replace("{{link_imprint}}", `${config.app_url}/imprint`).replace("{{link_privacy}}", `${config.app_url}/privacy`);
|
|
||||||
const mail: MailOptions = {
|
|
||||||
to: to_address,
|
|
||||||
subject: "LfK! Test Mail",
|
|
||||||
text: body_txt,
|
|
||||||
html: body_html
|
|
||||||
};
|
|
||||||
await this.sendMail(mail);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrapper function for sending a mail via this object's transporter.
|
|
||||||
* @param mail MailOptions object containing the
|
|
||||||
*/
|
|
||||||
public async sendMail(mail: MailOptions) {
|
public async sendMail(mail: MailOptions) {
|
||||||
mail.from = config.mail_from;
|
mail.from = config.mail_from;
|
||||||
await this.transport.sendMail(mail);
|
await this.transport.sendMail(mail);
|
||||||
|
@ -15,6 +15,5 @@ export enum PermissionTarget {
|
|||||||
STATION = 'STATION',
|
STATION = 'STATION',
|
||||||
CARD = 'CARD',
|
CARD = 'CARD',
|
||||||
DONATION = 'DONATION',
|
DONATION = 'DONATION',
|
||||||
CONTACT = 'CONTACT',
|
CONTACT = 'CONTACT'
|
||||||
MAIL = 'MAIL'
|
|
||||||
}
|
}
|
@ -1,369 +0,0 @@
|
|||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="de" xmlns="http://www.w3.org/1999/xhtml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml">
|
|
||||||
<head>
|
|
||||||
<title>LfK! - Mail test</title> <!-- The title tag shows in email notifications, like Android 4.4. -->
|
|
||||||
<meta charset="utf-8"> <!-- utf-8 works for most cases -->
|
|
||||||
<meta http-equiv="Content-Type" content="text/html charset=UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width"> <!-- Forcing initial-scale shouldn't be necessary -->
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- Use the latest (edge) version of IE rendering engine -->
|
|
||||||
<meta name="x-apple-disable-message-reformatting"> <!-- Disable auto-scale in iOS 10 Mail entirely -->
|
|
||||||
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no"> <!-- Tell iOS not to automatically link certain text strings. -->
|
|
||||||
|
|
||||||
<!-- CSS Reset : BEGIN -->
|
|
||||||
<style>
|
|
||||||
/* What it does: Remove spaces around the email design added by some email clients. */
|
|
||||||
/* Beware: It can remove the padding / margin and add a background color to the compose a reply window. */
|
|
||||||
html,
|
|
||||||
body {
|
|
||||||
margin: 0 auto !important;
|
|
||||||
padding: 0 !important;
|
|
||||||
height: 100% !important;
|
|
||||||
width: 100% !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Stops email clients resizing small text. */
|
|
||||||
* {
|
|
||||||
-ms-text-size-adjust: 100%;
|
|
||||||
-webkit-text-size-adjust: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Centers email on Android 4.4 */
|
|
||||||
div[style*="margin: 16px 0"] {
|
|
||||||
margin:0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Stops Outlook from adding extra spacing to tables. */
|
|
||||||
table,
|
|
||||||
td {
|
|
||||||
mso-table-lspace: 0pt !important;
|
|
||||||
mso-table-rspace: 0pt !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Fixes webkit padding issue. */
|
|
||||||
table {
|
|
||||||
border: 0;
|
|
||||||
border-spacing: 0;
|
|
||||||
border-collapse: collapse
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Forces Samsung Android mail clients to use the entire viewport. */
|
|
||||||
#MessageViewBody,
|
|
||||||
#MessageWebViewDiv{
|
|
||||||
width: 100% !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Uses a better rendering method when resizing images in IE. */
|
|
||||||
img {
|
|
||||||
-ms-interpolation-mode:bicubic;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Prevents Windows 10 Mail from underlining links despite inline CSS. Styles for underlined links should be inline. */
|
|
||||||
a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: A work-around for email clients automatically linking certain text strings. */
|
|
||||||
/* iOS */
|
|
||||||
a[x-apple-data-detectors],
|
|
||||||
.unstyle-auto-detected-links a,
|
|
||||||
.aBn {
|
|
||||||
border-bottom: 0 !important;
|
|
||||||
cursor: default !important;
|
|
||||||
color: inherit !important;
|
|
||||||
text-decoration: none !important;
|
|
||||||
font-size: inherit !important;
|
|
||||||
font-family: inherit !important;
|
|
||||||
font-weight: inherit !important;
|
|
||||||
line-height: inherit !important;
|
|
||||||
}
|
|
||||||
u + #body a, /* Gmail */
|
|
||||||
#MessageViewBody a /* Samsung Mail */
|
|
||||||
{
|
|
||||||
color: inherit;
|
|
||||||
text-decoration: none;
|
|
||||||
font-size: inherit;
|
|
||||||
font-family: inherit;
|
|
||||||
font-weight: inherit;
|
|
||||||
line-height: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Prevents Gmail from changing the text color in conversation threads. */
|
|
||||||
.im {
|
|
||||||
color: inherit !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Prevents Gmail from displaying an download button on large, non-linked images. */
|
|
||||||
.a6S {
|
|
||||||
display: none !important;
|
|
||||||
opacity: 0.01 !important;
|
|
||||||
}
|
|
||||||
/* If the above doesn't work, add a .g-img class to any image in question. */
|
|
||||||
img.g-img + div {
|
|
||||||
display:none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Removes right gutter in Gmail iOS app: https://github.com/TedGoas/Cerberus/issues/89 */
|
|
||||||
/* Create one of these media queries for each additional viewport size you'd like to fix */
|
|
||||||
|
|
||||||
/* iPhone 4, 4S, 5, 5S, 5C, and 5SE */
|
|
||||||
@media only screen and (min-device-width: 320px) and (max-device-width: 374px) {
|
|
||||||
u ~ div .email-container {
|
|
||||||
min-width: 320px !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* iPhone 6, 6S, 7, 8, and X */
|
|
||||||
@media only screen and (min-device-width: 375px) and (max-device-width: 413px) {
|
|
||||||
u ~ div .email-container {
|
|
||||||
min-width: 375px !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* iPhone 6+, 7+, and 8+ */
|
|
||||||
@media only screen and (min-device-width: 414px) {
|
|
||||||
u ~ div .email-container {
|
|
||||||
min-width: 414px !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<!-- What it does: Helps DPI scaling in Outlook 2007-2013 -->
|
|
||||||
<!--[if gte mso 9]>
|
|
||||||
<xml>
|
|
||||||
<o:OfficeDocumentSettings>
|
|
||||||
<o:AllowPNG/>
|
|
||||||
<o:PixelsPerInch>96</o:PixelsPerInch>
|
|
||||||
</o:OfficeDocumentSettings>
|
|
||||||
</xml>
|
|
||||||
<![endif]-->
|
|
||||||
|
|
||||||
<!-- CSS Reset : END -->
|
|
||||||
|
|
||||||
<!-- Progressive Enhancements : BEGIN -->
|
|
||||||
<style>
|
|
||||||
/* What it does: Hover styles for buttons and tags */
|
|
||||||
.s-btn__primary:hover {
|
|
||||||
background: #0077CC !important;
|
|
||||||
border-color: #0077CC !important;
|
|
||||||
}
|
|
||||||
.s-btn__white:hover {
|
|
||||||
background: #EFF0F1 !important;
|
|
||||||
border-color: #EFF0F1 !important;
|
|
||||||
}
|
|
||||||
.s-btn__outlined:hover {
|
|
||||||
background: rgba(0,119,204,.05) !important;
|
|
||||||
color: #005999 !important;
|
|
||||||
}
|
|
||||||
.s-tag:hover,
|
|
||||||
.post-tag:hover {
|
|
||||||
border-color: #cee0ed !important;
|
|
||||||
background: #cee0ed !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Styles markdown links that we can't write inline CSS for. */
|
|
||||||
.has-markdown a,
|
|
||||||
.has-markdown a:visited {
|
|
||||||
color: #0077CC !important;
|
|
||||||
text-decoration: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Styles markdown code blocks that we can't write inline CSS for. */
|
|
||||||
code {
|
|
||||||
padding: 1px 5px;
|
|
||||||
background-color: #EFF0F1;
|
|
||||||
color: #242729;
|
|
||||||
font-size: 13px;
|
|
||||||
line-height: inherit;
|
|
||||||
font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, sans-serif;
|
|
||||||
}
|
|
||||||
pre {
|
|
||||||
margin: 0 0 15px;
|
|
||||||
line-height: 17px;
|
|
||||||
background-color: #EFF0F1;
|
|
||||||
padding: 4px 8px;
|
|
||||||
border-radius: 3px;
|
|
||||||
overflow-x: auto;
|
|
||||||
}
|
|
||||||
pre code {
|
|
||||||
margin: 0 0 15px;
|
|
||||||
padding: 0;
|
|
||||||
line-height: 17px;
|
|
||||||
background-color: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Styles markdown blockquotes that we can't write inline CSS for. */
|
|
||||||
blockquote {
|
|
||||||
margin: 0 0 15px;
|
|
||||||
padding: 4px 10px;
|
|
||||||
background-color: #FFF8DC;
|
|
||||||
border-left: 2px solid #ffeb8e;
|
|
||||||
}
|
|
||||||
blockquote p {
|
|
||||||
padding: 4px 0;
|
|
||||||
margin: 0;
|
|
||||||
overflow-wrap: break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Rounds corners in email clients that support it */
|
|
||||||
.bar {
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
.btr {
|
|
||||||
border-top-left-radius: 5px;
|
|
||||||
border-top-right-radius: 5px;
|
|
||||||
}
|
|
||||||
.bbr {
|
|
||||||
border-bottom-left-radius: 5px;
|
|
||||||
border-bottom-right-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 680px) {
|
|
||||||
/* What it does: Forces table cells into full-width rows. */
|
|
||||||
.stack-column,
|
|
||||||
.stack-column-center {
|
|
||||||
display: block !important;
|
|
||||||
width: 100% !important;
|
|
||||||
max-width: 100% !important;
|
|
||||||
direction: ltr !important;
|
|
||||||
}
|
|
||||||
/* And center justify these ones. */
|
|
||||||
.stack-column-center {
|
|
||||||
text-align: center !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Hides things in small viewports. */
|
|
||||||
.hide-on-mobile {
|
|
||||||
display: none !important;
|
|
||||||
max-height: 0 !important;
|
|
||||||
overflow: hidden !important;
|
|
||||||
visibility: hidden !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* What it does: Utility classes to reduce spacing for smaller viewports. */
|
|
||||||
.sm-p-none {padding: 0 !important;}
|
|
||||||
.sm-pt-none {padding-top: 0 !important;}
|
|
||||||
.sm-pb-none {padding-bottom: 0 !important;}
|
|
||||||
.sm-pr-none {padding-right: 0 !important;}
|
|
||||||
.sm-pl-none {padding-left: 0 !important;}
|
|
||||||
.sm-px-none {padding-left: 0 !important; padding-right: 0 !important;}
|
|
||||||
.sm-py-none {padding-top: 0 !important; padding-bottom: 0 !important;}
|
|
||||||
|
|
||||||
.sm-p {padding: 20px !important;}
|
|
||||||
.sm-pt {padding-top: 20px !important;}
|
|
||||||
.sm-pb {padding-bottom: 20px !important;}
|
|
||||||
.sm-pr {padding-right: 20px !important;}
|
|
||||||
.sm-pl {padding-left: 20px !important;}
|
|
||||||
.sm-px {padding-left: 20px !important; padding-right: 20px !important;}
|
|
||||||
.sm-py {padding-top: 20px !important; padding-bottom: 20px !important;}
|
|
||||||
.sm-mb {margin-bottom: 20px !important;}
|
|
||||||
|
|
||||||
/* What it does: Utility classes to kill border radius for smaller viewports. Used mainly on the email's main container(s). */
|
|
||||||
.bar,
|
|
||||||
.btr,
|
|
||||||
.bbr {
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<!-- Progressive Enhancements : END -->
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
The email background color is defined in three places, just below. If you change one, remember to change the others.
|
|
||||||
1. body tag: for most email clients
|
|
||||||
2. center tag: for Gmail and Inbox mobile apps and web versions of Gmail, GSuite, Inbox, Yahoo, AOL, Libero, Comcast, freenet, Mail.ru, Orange.fr
|
|
||||||
3. mso conditional: For Windows 10 Mail
|
|
||||||
-->
|
|
||||||
<body width="100%" style="margin: 0; padding: 0 !important; background: #f3f3f5; mso-line-height-rule: exactly;">
|
|
||||||
<center style="width: 100%; background: #f3f3f5;">
|
|
||||||
<!--[if mso | IE]>
|
|
||||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%" style="background-color: #f3f3f5;">
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<![endif]-->
|
|
||||||
|
|
||||||
<!-- Visually Hidden Preview Text : BEGIN -->
|
|
||||||
<div style="display: none; font-size: 1px; line-height: 1px; max-height: 0px; max-width: 0px; opacity: 0; overflow: hidden; mso-hide: all; font-family: sans-serif;">
|
|
||||||
LfK! - Mail test
|
|
||||||
</div>
|
|
||||||
<!-- Visually Hidden Preview Text : END -->
|
|
||||||
|
|
||||||
<div class="email-container" style="max-width: 680px; margin: 0 auto;">
|
|
||||||
<!--[if mso]>
|
|
||||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="680" align="center">
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<![endif]-->
|
|
||||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="max-width: 680px; width:100%">
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 30px; background-color: #ffffff;" class="sm-p bar">
|
|
||||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%;">
|
|
||||||
<tr>
|
|
||||||
<td style="padding-bottom: 15px; font-family: arial, sans-serif; font-size: 15px; line-height: 21px; color: #3C3F44; text-align: left;">
|
|
||||||
<h1 style="font-weight: bold; font-size: 27px; line-height: 27px; color: #0C0D0E; margin: 0 0 15px 0;">LfK!</h1>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="padding-bottom: 15px; font-family: arial, sans-serif; font-size: 15px; line-height: 21px; color: #3C3F44; text-align: left;">
|
|
||||||
<h1 style="font-weight: bold; font-size: 21px; line-height: 21px; color: #0C0D0E; margin: 0 0 15px 0;">Test mail</h1>
|
|
||||||
<p style="margin: 0 0 15px;" class="has-markdown">This is a test mail triggered by an admin in the LfK! backend.</p>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<!-----------------------------
|
|
||||||
|
|
||||||
EMAIL BODY : END
|
|
||||||
|
|
||||||
------------------------------>
|
|
||||||
|
|
||||||
<!-- Footer : BEGIN -->
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 30px;" class="sm-p">
|
|
||||||
<table align="left" border="0" cellpadding="0" cellspacing="0" role="presentation" width="100%">
|
|
||||||
<!-- Subscription Info : BEGIN -->
|
|
||||||
<tr>
|
|
||||||
<td style="padding-bottom: 10px; font-size: 12px; line-height: 15px; font-family: arial, sans-serif; color: #9199A1; text-align: left;">
|
|
||||||
Copyright © {{copyright_owner}}. All rights reserved.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="font-size: 12px; line-height: 15px; font-family: arial, sans-serif; color: #9199A1; text-align: left;">
|
|
||||||
<a href="{{link_imprint}}"
|
|
||||||
style="color: #9199A1; text-decoration: underline;">Imprint</a>
|
|
||||||
<a href="{{link_privacy}}" style="color: #9199A1; text-decoration: underline;">Privacy</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<!-- Subscription Info : BEGIN -->
|
|
||||||
<!-- HR line : BEGIN -->
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 30px 0;" width="100%" class="sm-py">
|
|
||||||
<table aria-hidden="true" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%">
|
|
||||||
<tr>
|
|
||||||
<td height="1" width="100%" style="font-size: 0; line-height: 0; border-top: 1px solid #D6D8DB;"> </td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<!-- HR line : END -->
|
|
||||||
<tr>
|
|
||||||
<td style="padding-bottom: 5px; font-size: 12px; line-height: 15px; font-family: arial, sans-serif; color: #9199A1; text-align: left;">This mail was sent to <strong>{{recipient_mail}}</strong> because someone request a mail test for this mail address.</td>
|
|
||||||
</tr>
|
|
||||||
<!-- Sender Info : END -->
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<!-- Footer : END -->
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<!--[if mso | IE]>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<![endif]-->
|
|
||||||
</center>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,8 +0,0 @@
|
|||||||
LfK! - Mail test.
|
|
||||||
|
|
||||||
This is a test mail triggered by an admin in the LfK! backend.
|
|
||||||
|
|
||||||
|
|
||||||
Copyright © {{copyright_owner}}. All rights reserved.
|
|
||||||
Imprint: {{link_imprint}} | Privacy: {{link_privacy}}
|
|
||||||
This mail was sent to {{recipient_mail}} because someone requested a mail test for this mail address.
|
|
@ -1,22 +0,0 @@
|
|||||||
import axios from 'axios';
|
|
||||||
import { config } from '../../config';
|
|
||||||
|
|
||||||
const base = "http://localhost:" + config.internal_port
|
|
||||||
|
|
||||||
let access_token;
|
|
||||||
let axios_config;
|
|
||||||
|
|
||||||
beforeAll(async () => {
|
|
||||||
const res = await axios.post(base + '/api/auth/login', { username: "demo", password: "demo" });
|
|
||||||
access_token = res.data["access_token"];
|
|
||||||
axios_config = {
|
|
||||||
headers: { "authorization": "Bearer " + access_token },
|
|
||||||
validateStatus: undefined
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('POST /mails/test valid', () => {
|
|
||||||
it('test mail request should return 200', async () => {
|
|
||||||
const res1 = await axios.post(base + '/api/mails/test', null, axios_config);
|
|
||||||
});
|
|
||||||
});
|
|
Loading…
x
Reference in New Issue
Block a user