import nodemailer from 'nodemailer'; import type { EmailOptions } from '../globalInterfaces'; const isDev = import.meta.env.DEV; const hasProductionFlag = import.meta.env.PROD === 'true'; const forceProduction = import.meta.env.PB_POCKETBASE_URL?.includes('avt-back') || false; const isProduction = hasProductionFlag || forceProduction || !isDev; const SMTP_HOST = isProduction ? (import.meta.env.SMTP_HOST || 'smtp.yandex.ru') : 'localhost'; const SMTP_PORT = isProduction ? (import.meta.env.SMTP_PORT || '587') : '1025'; const SMTP_AUTH_USER = isProduction ? (import.meta.env.SMTP_AUTH_USER || '') : ''; const SMTP_AUTH_PASS = isProduction ? (import.meta.env.SMTP_AUTH_PASS || '') : ''; const FROM_EMAIL = isProduction ? (import.meta.env.FROM_EMAIL || 'noreply@localhost') : 'noreply@localhost'; const FROM_NAME = isProduction ? (import.meta.env.FROM_NAME || 'Автоюрист Сургут') : 'Dev'; const SITE_URL = isProduction ? (import.meta.env.SITE_URL || 'https://avtourist-surgut.ru') : 'http://localhost:4321'; let transporter: nodemailer.Transporter | null = null; console.log('[EMAIL] isDev:', isDev); console.log('[EMAIL] isProduction:', isProduction); console.log('[EMAIL] SMTP:', SMTP_HOST, ':', SMTP_PORT); function getTransporter() { if (!transporter) { const useTLS = SMTP_PORT === '465'; transporter = nodemailer.createTransport({ host: SMTP_HOST, port: parseInt(SMTP_PORT), secure: useTLS, requireTLS: !useTLS, connectionTimeout: 10000, greetingTimeout: 10000, auth: isProduction && SMTP_AUTH_USER ? { user: SMTP_AUTH_USER, pass: SMTP_AUTH_PASS, } : undefined, }); } return transporter; } async function sendViaResendApi(options: EmailOptions): Promise { try { console.log('[RESEND_API] Sending to:', options.to); const response = await fetch('https://api.resend.com/emails', { method: 'POST', headers: { 'Authorization': `Bearer ${RESEND_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ from: `${FROM_NAME} <${FROM_EMAIL}>`, to: options.to, subject: options.subject, html: options.html, }), }); const data = await response.json(); if (response.ok) { console.log('[RESEND_API] Email sent:', data.id); return true; } else { console.error('[RESEND_API] Error:', data); return false; } } catch (error) { console.error('[RESEND_API] Error:', error); return false; } } function withTimeout(promise: Promise, ms: number): Promise { return Promise.race([ promise, new Promise((_, reject) => setTimeout(() => reject(new Error('Email send timeout')), ms) ) ]); } export async function sendEmail(options: EmailOptions): Promise { console.log('[NODEMAILER] Sending to:', options.to); console.log('[NODEMAILER] SMTP config:', { host: SMTP_HOST, port: SMTP_PORT, user: SMTP_AUTH_USER }); try { const info = await withTimeout( getTransporter().sendMail({ from: `${FROM_NAME} <${FROM_EMAIL}>`, to: options.to, subject: options.subject, html: options.html, }), 15000 ); console.log('[NODEMAILER] Email sent:', info.messageId); return true; } catch (error) { console.error('[NODEMAILER] Email send error:', error); return false; } } export function getSiteUrl(): string { return SITE_URL; } export function generateVerifyEmailHtml(firstName: string, verifyLink: string): string { return ` Подтверждение регистрации

Автоюрист Сургут

Юридические услуги для автовладельцев

Добро пожаловать, ${firstName}!

Благодарим за регистрацию на сайте avtourist-surgut.ru. Мы рады, что вы выбрали нас для решения юридических вопросов, связанных с автомобилем.

Для завершения регистрации и активации вашего аккаунта, пожалуйста, подтвердите ваш email, нажав на кнопку ниже:

Подтвердить регистрацию

Бесплатная консультация

Оплата за результат

Работаем 24/7

© 2026 Автоюрист Сургут. Все права защищены.

Это письмо отправлено автоматически, пожалуйста, не отвечайте на него.

`; }