Files
event-qr/dist/mail/mail.service.js
2025-11-29 13:16:01 +01:00

96 lines
4.7 KiB
JavaScript

"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MailService = void 0;
const common_1 = require("@nestjs/common");
const nodemailer = require("nodemailer");
const config_1 = require("@nestjs/config");
const path = require("path");
let MailService = class MailService {
constructor(configService) {
this.configService = configService;
this.transporter = nodemailer.createTransport({
host: this.configService.get('SMTP_HOST'),
port: this.configService.get('SMTP_PORT'),
secure: this.configService.get('SMTP_SECURE') === 'true',
auth: {
user: this.configService.get('SMTP_USER'),
pass: this.configService.get('SMTP_PASS'),
},
});
}
async sendTicket(email, name, ticketId, eventName, qrCodeBuffer) {
const logoPath = path.join(process.cwd(), 'dist/assets/atiw-out-logo.svg');
const firstName = name.split(' ')[0];
await this.transporter.sendMail({
from: this.configService.get('SMTP_FROM') || '"Event Team" <noreply@example.com>',
to: email,
subject: `Dein Ticket fürs ATIW OUT!`,
html: `
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; background-color: #f4f4f5; margin: 0; padding: 0; }
.container { max-width: 600px; margin: 32px auto; background-color: #ffffff; border-radius: 8px; overflow: hidden; border: 1px solid rgba(0, 0, 0, 0.2); padding: 32px; }
.header { background-color: #ffffff; text-align: center; }
.logo { height: 150px;}
.content {text-align: center; color: #333333; }
.greeting { font-size: 32px; color: #18181b; }
.text { font-size: 16px; line-height: 1.5; color: #52525b;}
.qr-container { background-color: #f4f4f5; padding: 24px; border-radius: 12px; display: inline-block; margin: 32px 0px; }
.footer { background-color: #fafafa; padding: 24px; text-align: center; font-size: 14px; color: #a1a1aa; border-top: 1px solid #e4e4e7; }
.highlight { color: #2563eb; font-weight: 600; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<img src="cid:logo" alt="Logo" class="logo" />
</div>
<div class="content">
<h2 class="greeting">Moin ${firstName},</h2>
<p class="text">Hier ist dein Ticket für das <strong>ATIW OUT</strong>!</p>
<p class="text">Zeig diesen QR Code einfach am <strong>09.12.</strong> am Eingang vor.</p>
<div class="qr-container">
<img src="cid:qrcode" width="200" height="200" alt="Dein Ticket QR Code" style="display: block;"/>
</div>
<p class="text">Wir wünschen dir viel Spaß!</p>
<p class="text">~FI231 & FS231</p>
<p class="text" style="margin-top: 32px;">Bei Fragen oder Problemen komm bitte<br>zum Klassenraum <strong>E.07</strong> und frag nach <strong>Jason</strong></p>
</div>
</div>
</body>
</html>
`,
attachments: [
{
filename: 'qrcode.png',
content: qrCodeBuffer,
cid: 'qrcode',
},
{
filename: 'logo.svg',
path: logoPath,
cid: 'logo',
},
],
});
}
};
exports.MailService = MailService;
exports.MailService = MailService = __decorate([
(0, common_1.Injectable)(),
__metadata("design:paramtypes", [config_1.ConfigService])
], MailService);
//# sourceMappingURL=mail.service.js.map