import nodemailer from 'nodemailer'; import { PrismaClient } from '@prisma/client'; import { logger } from '../../utils/logger'; const prisma = new PrismaClient(); // Конфигурация email транспорта const transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST || 'smtp.gmail.com', port: Number(process.env.SMTP_PORT) || 587, secure: false, // true для 465, false для других портов auth: { user: process.env.SMTP_USER, pass: (process.env.SMTP_PASS && process.env.SMTP_PASS.startsWith('"') && process.env.SMTP_PASS.endsWith('"')) ? process.env.SMTP_PASS.slice(1, -1) : process.env.SMTP_PASS } }); export interface EmailNotification { to: string; subject: string; text?: string; html?: string; } // Отправка email уведомления export async function sendEmail(notification: EmailNotification) { try { // Проверяем наличие конфигурации SMTP if (!process.env.SMTP_USER || !process.env.SMTP_PASS) { logger.debug('SMTP not configured, skipping email notification'); return { status: 'skipped', message: 'SMTP not configured' }; } const info = await transporter.sendMail({ from: `"Ospab Host" <${process.env.SMTP_USER}>`, ...notification }); logger.info('Email sent: %s', info.messageId); return { status: 'success', messageId: info.messageId }; } catch (error: any) { logger.error('Error sending email:', error); return { status: 'error', message: error.message }; } } // Отправка уведомления о высокой нагрузке export async function sendResourceAlertEmail(userId: number, serverId: number, alertType: string, value: string) { try { const user = await prisma.user.findUnique({ where: { id: userId } }); if (!user) return { status: 'error', message: 'User not found' }; const subject = `Предупреждение: Высокая нагрузка на сервер #${serverId}`; const html = `
Здравствуйте, ${user.username}!
Обнаружено превышение лимитов ресурсов на вашем сервере #${serverId}:
Рекомендуем проверить сервер и при необходимости увеличить его ресурсы.
С уважением,
Команда Ospab Host
Здравствуйте, ${user.username}!
Ваш новый сервер был успешно создан:
Вы можете управлять сервером через панель управления.
С уважением,
Команда Ospab Host
Здравствуйте, ${user.username}!
До окончания срока действия вашего тарифа для сервера #${serverId} осталось ${daysLeft} дней.
Пожалуйста, пополните баланс, чтобы избежать прерывания обслуживания.
Ваш текущий баланс: ${user.balance}₽
С уважением,
Команда Ospab Host