Mist, jetzt vielleicht
This commit is contained in:
49
lib/mailService.ts
Normal file
49
lib/mailService.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import nodemailer from 'nodemailer';
|
||||
import moment from 'moment';
|
||||
import type { RowDataPacket } from 'mysql2';
|
||||
import pool from './mysql';
|
||||
import { checkAblauf } from './checkAblauf';
|
||||
|
||||
// SMTP-Konfiguration via Umgebungsvariablen (Passwort niemals hart codieren!)
|
||||
const transporter = nodemailer.createTransport({
|
||||
host: process.env.SMTP_HOST || 'smtp.1und1.de',
|
||||
port: parseInt(process.env.SMTP_PORT || '587', 10),
|
||||
secure: false,
|
||||
auth: {
|
||||
user: process.env.SMTP_USER || '',
|
||||
pass: process.env.SMTP_PASS || '',
|
||||
},
|
||||
});
|
||||
|
||||
export async function doCheckAndMail(): Promise<string> {
|
||||
const [rows] = await pool.query<RowDataPacket[]>(
|
||||
'SELECT tab, pday, cnt, at FROM tabletten'
|
||||
);
|
||||
|
||||
let body = '';
|
||||
|
||||
for (const item of rows) {
|
||||
if (item.pday !== 0) {
|
||||
const updates = checkAblauf({ cnt: item.cnt, pday: item.pday, at: item.at });
|
||||
await pool.execute(
|
||||
'UPDATE tabletten SET akt = ?, until = ?, warn = ? WHERE tab = ?',
|
||||
[updates.akt, moment(updates.until).format('YYYY-MM-DD'), updates.warn ? 1 : 0, item.tab]
|
||||
);
|
||||
if (updates.warn) {
|
||||
const name = item.tab.split(' ')[0];
|
||||
body += `"${name}" wird am ${moment(updates.until).format('YYYY-MM-DD')} (in ${updates.rtage} Tagen) zu Ende sein\n`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (body) {
|
||||
await transporter.sendMail({
|
||||
from: `"Tabletten" <${process.env.SMTP_USER}>`,
|
||||
to: process.env.MAIL_TO || '',
|
||||
subject: 'Tabletten gehen zu Ende',
|
||||
text: body,
|
||||
});
|
||||
}
|
||||
|
||||
return body || 'Kein Warn-Eintrag.';
|
||||
}
|
||||
Reference in New Issue
Block a user