46 lines
1.0 KiB
TypeScript
46 lines
1.0 KiB
TypeScript
|
|
import nodemailer from 'nodemailer';
|
||
|
|
|
||
|
|
interface EmailOptions {
|
||
|
|
from: string;
|
||
|
|
to: string;
|
||
|
|
subject: string;
|
||
|
|
html?: string;
|
||
|
|
text?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
interface SmtpConfig {
|
||
|
|
host: string;
|
||
|
|
port: number;
|
||
|
|
secure: boolean;
|
||
|
|
auth: {
|
||
|
|
user: string;
|
||
|
|
pass: string;
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function sendEmail(options: EmailOptions, config?: SmtpConfig) {
|
||
|
|
// Use provided config or default to environment config
|
||
|
|
const smtpConfig = config || {
|
||
|
|
host: process.env.SMTP_HOST || 'mail.portnimara.com',
|
||
|
|
port: parseInt(process.env.SMTP_PORT || '465'),
|
||
|
|
secure: process.env.SMTP_SECURE !== 'false',
|
||
|
|
auth: {
|
||
|
|
user: process.env.SMTP_USER || '',
|
||
|
|
pass: process.env.SMTP_PASS || ''
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
// Create transporter
|
||
|
|
const transporter = nodemailer.createTransport(smtpConfig);
|
||
|
|
|
||
|
|
// Send email
|
||
|
|
try {
|
||
|
|
const info = await transporter.sendMail(options);
|
||
|
|
console.log('Email sent:', info.messageId);
|
||
|
|
return info;
|
||
|
|
} catch (error) {
|
||
|
|
console.error('Failed to send email:', error);
|
||
|
|
throw error;
|
||
|
|
}
|
||
|
|
}
|